mirror of
https://github.com/A2osX/A2osX.git
synced 2025-01-14 00:31:41 +00:00
Kernel 0.9.2
This commit is contained in:
parent
f5a068fa2b
commit
e45693c1ae
@ -71,6 +71,23 @@ A2osX.S.XY .EQ $E1
|
|||||||
A2osX.S.NIC .EQ $E2
|
A2osX.S.NIC .EQ $E2
|
||||||
A2osX.S.DISABLE .EQ $FF
|
A2osX.S.DISABLE .EQ $FF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* A2osX.SYSCALL Constants
|
||||||
|
*--------------------------------------
|
||||||
|
AF.LOCAL .EQ 0
|
||||||
|
AF.INET .EQ 2
|
||||||
|
AF.APPLETALK .EQ 4
|
||||||
|
*--------------------------------------
|
||||||
|
O.RDONLY .EQ %00000001
|
||||||
|
O.WRONLY .EQ %00000010
|
||||||
|
O.RDWR .EQ %00000011
|
||||||
|
O.APPEND .EQ %00000100
|
||||||
|
O.TEXT .EQ %00001000
|
||||||
|
O.CREATE .EQ %10000000
|
||||||
|
*--------------------------------------
|
||||||
|
SEEK.SET .EQ $00
|
||||||
|
SEEK.CUR .EQ $02
|
||||||
|
SEEK.END .EQ $04
|
||||||
|
*--------------------------------------
|
||||||
* A2osX.SYSCALL Functions Indexes
|
* A2osX.SYSCALL Functions Indexes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* .EQ $00
|
* .EQ $00
|
||||||
@ -86,11 +103,6 @@ SYS.OpenDir .EQ $10
|
|||||||
SYS.ReadDir .EQ $12
|
SYS.ReadDir .EQ $12
|
||||||
SYS.CloseDir .EQ $14
|
SYS.CloseDir .EQ $14
|
||||||
SYS.Open .EQ $16
|
SYS.Open .EQ $16
|
||||||
SYS.Open.RDONLY .EQ %00000001
|
|
||||||
SYS.Open.WRONLY .EQ %00000010
|
|
||||||
SYS.Open.RDWR .EQ %00000011
|
|
||||||
SYS.Open.APPEND .EQ %00000100
|
|
||||||
SYS.Open.CREATE .EQ %10000000
|
|
||||||
SYS.Close .EQ $18
|
SYS.Close .EQ $18
|
||||||
SYS.Read .EQ $1A
|
SYS.Read .EQ $1A
|
||||||
SYS.Write .EQ $1C
|
SYS.Write .EQ $1C
|
||||||
@ -106,19 +118,11 @@ SYS.FGetS .EQ $2C
|
|||||||
* .EQ $2E
|
* .EQ $2E
|
||||||
|
|
||||||
SYS.FOpen .EQ $30
|
SYS.FOpen .EQ $30
|
||||||
SYS.FOpen.R .EQ $01 Open For Read
|
|
||||||
SYS.FOpen.W .EQ $02 Open For Write
|
|
||||||
SYS.FOpen.A .EQ $04 Append
|
|
||||||
SYS.FOpen.T .EQ $08 Open/Append in Text mode
|
|
||||||
SYS.FOpen.X .EQ $80 Create if not exists
|
|
||||||
SYS.FClose .EQ $32
|
SYS.FClose .EQ $32
|
||||||
SYS.FRead .EQ $34
|
SYS.FRead .EQ $34
|
||||||
SYS.FWrite .EQ $36
|
SYS.FWrite .EQ $36
|
||||||
SYS.FFlush .EQ $38
|
SYS.FFlush .EQ $38
|
||||||
SYS.FSeek .EQ $3A
|
SYS.FSeek .EQ $3A
|
||||||
SYS.FSeek.SET .EQ $00
|
|
||||||
SYS.FSeek.CUR .EQ $02
|
|
||||||
SYS.FSeek.END .EQ $04
|
|
||||||
SYS.FTell .EQ $3C
|
SYS.FTell .EQ $3C
|
||||||
SYS.FEOF .EQ $3E
|
SYS.FEOF .EQ $3E
|
||||||
|
|
||||||
|
@ -39,21 +39,23 @@ LIBTCPIP.DNS.GetCache .EQ 26
|
|||||||
LIBTCPIP.HST.GetByName .EQ 28
|
LIBTCPIP.HST.GetByName .EQ 28
|
||||||
LIBTCPIP.HST.GetByAddr .EQ 30
|
LIBTCPIP.HST.GetByAddr .EQ 30
|
||||||
|
|
||||||
LIBTCPIP.SKT.New .EQ 32
|
LIBTCPIP.SKT.Socket .EQ 32
|
||||||
LIBTCPIP.SKT.Close .EQ 34
|
LIBTCPIP.SKT.Bind .EQ 34
|
||||||
LIBTCPIP.SKT.GetTable .EQ 36
|
LIBTCPIP.SKT.Connect .EQ 36
|
||||||
LIBTCPIP.SKT.Get .EQ 38
|
LIBTCPIP.SKT.Listen .EQ 38
|
||||||
|
|
||||||
LIBTCPIP.SKT.Accept .EQ 40
|
LIBTCPIP.SKT.Accept .EQ 40
|
||||||
LIBTCPIP.SKT.MkNod .EQ 42
|
LIBTCPIP.SKT.Close .EQ 42
|
||||||
|
|
||||||
LIBTCPIP.SKT.Read .EQ 44
|
LIBTCPIP.SKT.Read .EQ 44
|
||||||
LIBTCPIP.SKT.Write .EQ 46
|
LIBTCPIP.SKT.Write .EQ 46
|
||||||
LIBTCPIP.SKT.Rcvd .EQ 48
|
LIBTCPIP.SKT.Recv .EQ 48
|
||||||
LIBTCPIP.SKT.Send .EQ 50
|
LIBTCPIP.SKT.Send .EQ 50
|
||||||
|
|
||||||
LIBTCPIP.SKT.RcvdFrom .EQ 52
|
LIBTCPIP.SKT.RecvFrom .EQ 52
|
||||||
LIBTCPIP.SKT.SendTo .EQ 54
|
LIBTCPIP.SKT.SendTo .EQ 54
|
||||||
|
|
||||||
|
LIBTCPIP.SKT.GetTable .EQ 56
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ERR.SKT.OOS .EQ $BF
|
ERR.SKT.OOS .EQ $BF
|
||||||
ERR.SKT.BUSY .EQ $BE
|
ERR.SKT.BUSY .EQ $BE
|
||||||
@ -110,20 +112,23 @@ S.DNSCACHE.IP .EQ 8
|
|||||||
*
|
*
|
||||||
S.DNSCACHE .EQ 12
|
S.DNSCACHE .EQ 12
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.SOCKADDR.ADDR .EQ 0
|
S.SOCKADDR.AF .EQ 0
|
||||||
S.SOCKADDR.PORT .EQ 4
|
|
||||||
|
S.SOCKADDR.ADDR .EQ 2
|
||||||
|
S.SOCKADDR.PORT .EQ 6
|
||||||
*
|
*
|
||||||
S.SOCKADDR .EQ 6
|
S.SOCKADDR .EQ 8
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.SOCKET.T .EQ S.FD.SOCK+0
|
S.SOCKET.AF .EQ S.FD.SOCK+0
|
||||||
|
S.SOCKET.T .EQ S.FD.SOCK+1
|
||||||
S.SOCKET.T.RAW .EQ 0
|
S.SOCKET.T.RAW .EQ 0
|
||||||
S.SOCKET.T.DGRAM .EQ 2
|
S.SOCKET.T.DGRAM .EQ 2
|
||||||
S.SOCKET.T.STREAM .EQ 4
|
S.SOCKET.T.STREAM .EQ 4
|
||||||
S.SOCKET.T.SEQPACKET .EQ 6
|
S.SOCKET.T.SEQPACKET .EQ 6
|
||||||
|
|
||||||
S.SOCKET.PROTO .EQ S.FD.SOCK+1
|
S.SOCKET.PROTO .EQ S.FD.SOCK+2
|
||||||
|
|
||||||
S.SOCKET.O .EQ S.FD.SOCK+2
|
S.SOCKET.O .EQ S.FD.SOCK+3
|
||||||
S.SOCKET.O.DEBUG .EQ $01
|
S.SOCKET.O.DEBUG .EQ $01
|
||||||
S.SOCKET.O.ACCEPTCONN .EQ $02
|
S.SOCKET.O.ACCEPTCONN .EQ $02
|
||||||
S.SOCKET.O.REUSEADDR .EQ $04
|
S.SOCKET.O.REUSEADDR .EQ $04
|
||||||
@ -133,10 +138,10 @@ S.SOCKET.O.BROADCAST .EQ $20
|
|||||||
S.SOCKET.O.USELOOPBACK .EQ $40
|
S.SOCKET.O.USELOOPBACK .EQ $40
|
||||||
S.SOCKET.O.LINGER .EQ $80
|
S.SOCKET.O.LINGER .EQ $80
|
||||||
|
|
||||||
S.SOCKET.SRC.ADDR .EQ S.FD.SOCK+4
|
S.SOCKET.LOC.ADDR .EQ S.FD.SOCK+4
|
||||||
S.SOCKET.SRC.PORT .EQ S.FD.SOCK+8
|
S.SOCKET.LOC.PORT .EQ S.FD.SOCK+8
|
||||||
S.SOCKET.DST.ADDR .EQ S.FD.SOCK+10
|
S.SOCKET.REM.ADDR .EQ S.FD.SOCK+10
|
||||||
S.SOCKET.DST.PORT .EQ S.FD.SOCK+14
|
S.SOCKET.REM.PORT .EQ S.FD.SOCK+14
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Listen type Queue
|
* Listen type Queue
|
||||||
* Raw Type Queue
|
* Raw Type Queue
|
||||||
|
@ -3,6 +3,38 @@ PREFIX /A2OSX.BUILD
|
|||||||
AUTO 4,1
|
AUTO 4,1
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
FRM.GetTargetSKT
|
||||||
|
ldy #S.TCPUDP.SRCPORT
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.REM.ADDR+S.SOCKADDR.PORT+1
|
||||||
|
iny
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.REM.ADDR+S.SOCKADDR.PORT
|
||||||
|
|
||||||
|
iny #S.TCPUDP.DSTPORT
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||||
|
iny
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||||
|
|
||||||
|
ldy #S.IP.SRC+3
|
||||||
|
ldx #3
|
||||||
|
.1 lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.REM.ADDR+S.SOCKADDR.ADDR,x
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
ldy #S.IP.DST+3
|
||||||
|
ldx #3
|
||||||
|
.2 lda (ZPFrameInPtr),y
|
||||||
|
sta SKT.LOC.ADDR+S.SOCKADDR.ADDR,x
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* FRM.NewIP
|
* FRM.NewIP
|
||||||
* In:
|
* In:
|
||||||
* Y,A = DataLen
|
* Y,A = DataLen
|
||||||
|
@ -58,10 +58,10 @@ ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDstIP
|
|||||||
|
|
||||||
ldy #S.ICMP.IDENTIFIER
|
ldy #S.ICMP.IDENTIFIER
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.DST.PORT+1
|
sta SKT.Template+S.SOCKET.REM.PORT+1
|
||||||
iny
|
iny
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.DST.PORT
|
sta SKT.Template+S.SOCKET.REM.PORT
|
||||||
|
|
||||||
lda hSocketTable
|
lda hSocketTable
|
||||||
>SYSCALL GetMemPtr
|
>SYSCALL GetMemPtr
|
||||||
@ -74,19 +74,19 @@ ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDstIP
|
|||||||
cmp #S.SOCKET.T.RAW
|
cmp #S.SOCKET.T.RAW
|
||||||
bne .7
|
bne .7
|
||||||
|
|
||||||
ldy #S.SOCKET.SRC.ADDR
|
ldy #S.SOCKET.LOC.ADDR
|
||||||
|
|
||||||
.4 lda (ZPPtrSKT),y
|
.4 lda (ZPPtrSKT),y
|
||||||
cmp SKT.Template,y
|
cmp SKT.Template,y
|
||||||
bne .7
|
bne .7
|
||||||
iny
|
iny
|
||||||
cpy #S.SOCKET.SRC.PORT
|
cpy #S.SOCKET.LOC.PORT
|
||||||
bne .5
|
bne .5
|
||||||
|
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
.5 cpy #S.SOCKET.DST.PORT Compare SRC.ADDR,DST.ADDR,DST.PORT
|
.5 cpy #S.SOCKET.REM.PORT Compare SRC.ADDR,DST.ADDR,DST.PORT
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
lda hFrameIn
|
lda hFrameIn
|
||||||
|
@ -189,23 +189,23 @@ IP.AddSrcDstIPToChecksum
|
|||||||
IP.FillSKT.TemplateSrcDstIPP
|
IP.FillSKT.TemplateSrcDstIPP
|
||||||
ldy #S.TCPUDP.SRCPORT
|
ldy #S.TCPUDP.SRCPORT
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.DST.PORT+1
|
sta SKT.Template+S.SOCKET.REM.PORT+1
|
||||||
iny
|
iny
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.DST.PORT
|
sta SKT.Template+S.SOCKET.REM.PORT
|
||||||
|
|
||||||
iny #S.TCPUDP.DSTPORT
|
iny #S.TCPUDP.DSTPORT
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.SRC.PORT+1
|
sta SKT.Template+S.SOCKET.LOC.PORT+1
|
||||||
iny
|
iny
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.SRC.PORT
|
sta SKT.Template+S.SOCKET.LOC.PORT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IP.FillSKT.TemplateSrcDstIP
|
IP.FillSKT.TemplateSrcDstIP
|
||||||
ldy #S.IP.SRC+3
|
ldy #S.IP.SRC+3
|
||||||
ldx #3
|
ldx #3
|
||||||
.1 lda (ZPFrameInPtr),y
|
.1 lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.DST.ADDR,x
|
sta SKT.Template+S.SOCKET.REM.ADDR,x
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
@ -213,7 +213,7 @@ IP.FillSKT.TemplateSrcDstIP
|
|||||||
ldy #S.IP.DST+3
|
ldy #S.IP.DST+3
|
||||||
ldx #3
|
ldx #3
|
||||||
.2 lda (ZPFrameInPtr),y
|
.2 lda (ZPFrameInPtr),y
|
||||||
sta SKT.Template+S.SOCKET.SRC.ADDR,x
|
sta SKT.Template+S.SOCKET.LOC.ADDR,x
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .2
|
bpl .2
|
||||||
|
@ -23,25 +23,22 @@ SKT.Socket sta FD.SSOCK+S.SOCKET.T save type
|
|||||||
|
|
||||||
jmp (J.SKT.Socket,x)
|
jmp (J.SKT.Socket,x)
|
||||||
|
|
||||||
SKT.Socket.RAW
|
SKT.Socket.RAW ldy #S.SOCKET
|
||||||
ldy #S.SOCKET
|
|
||||||
bra SKT.Socket.NEW
|
bra SKT.Socket.NEW
|
||||||
SKT.Socket.DGRAM
|
SKT.Socket.DGRAM
|
||||||
lda #S.IP.PROTOCOL.UDP
|
lda #S.IP.PROTOCOL.UDP
|
||||||
sta TmpDWord
|
|
||||||
ldy #S.SOCKET
|
ldy #S.SOCKET
|
||||||
bra SKT.Socket.NEW
|
bra SKT.Socket.NEW
|
||||||
SKT.Socket.STREAM
|
SKT.Socket.STREAM
|
||||||
lda #S.IP.PROTOCOL.TCP
|
lda #S.IP.PROTOCOL.TCP
|
||||||
sta TmpDWord
|
|
||||||
ldy #S.SOCKET.TCP
|
ldy #S.SOCKET.TCP
|
||||||
bra SKT.Socket.NEW
|
bra SKT.Socket.NEW
|
||||||
SKT.Socket.SEQPACKET
|
SKT.Socket.SEQPACKET
|
||||||
lda #S.IP.PROTOCOL.TCP
|
lda #S.IP.PROTOCOL.TCP
|
||||||
sta TmpDWord
|
|
||||||
ldy #S.SOCKET.TCP
|
ldy #S.SOCKET.TCP
|
||||||
|
|
||||||
SKT.Socket.NEW lda #0
|
SKT.Socket.NEW sta FD.SSOCK+S.SOCKET.PROTO
|
||||||
|
lda #0
|
||||||
>SYSCALL GetMem0
|
>SYSCALL GetMem0
|
||||||
bcs .99
|
bcs .99
|
||||||
>STYA ZPPtrSKT
|
>STYA ZPPtrSKT
|
||||||
@ -90,63 +87,30 @@ SKT.Socket.NEW lda #0
|
|||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.bind >SYSCALL GetMemPtr
|
SKT.bind >SYSCALL GetMemPtr
|
||||||
>STYA ZPPtrSKT
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
|
jsr SKT.GetLocAddr
|
||||||
|
|
||||||
>PULLW ZPTmpPtr1
|
lda SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||||
|
bne .1
|
||||||
ldy #S.SOCKADDR-1
|
ldy SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||||
|
|
||||||
.1 lda (ZPTmpPtr1),y
|
|
||||||
sta SKT.ADDRCache,y
|
|
||||||
dey
|
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
jsr SKT.FindMatching
|
jsr GetDynPort
|
||||||
|
|
||||||
|
sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1
|
||||||
|
stx SKT.LOC.ADDR+S.SOCKADDR.PORT
|
||||||
|
|
||||||
|
.1 jsr SKT.FindMatchingLoc
|
||||||
bcc .9
|
bcc .9
|
||||||
|
|
||||||
ldy #S.SOCKET.SRC.ADDR+S.SOCKADDR-1
|
jsr SKT.SetLocAddr
|
||||||
|
|
||||||
.2 lda SKT.ADDRCache-S.SOCKET.SRC.ADDR,y
|
|
||||||
sta (ZPTmpPtr1),y
|
|
||||||
bne .7
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #ERR.SKT.BUSY
|
.9 lda #ERR.SKT.BUSY
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
SKT.FindMatching
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 lda SKT.TABLE,x
|
|
||||||
beq .7
|
|
||||||
|
|
||||||
>SYSCALL GetMemPtr
|
|
||||||
>STYA ZPTmpPtr1
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SRC.ADDR+S.SOCKADDR-1
|
|
||||||
|
|
||||||
.2 lda (ZPTmpPtr1),y
|
|
||||||
cmp SKT.ADDRCache-S.SOCKET.SRC.ADDR,y
|
|
||||||
bne .7
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
>LDYA ZPTmpPtr1
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.7 inx
|
|
||||||
cpx #K.SKTTABLE.SIZE
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
* sec
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SKT.connect
|
* # SKT.connect
|
||||||
* Iinitiate a connection on a socket
|
* Iinitiate a connection on a socket
|
||||||
@ -164,164 +128,176 @@ SKT.FindMatching
|
|||||||
SKT.connect >SYSCALL GetMemPtr
|
SKT.connect >SYSCALL GetMemPtr
|
||||||
>STYA ZPPtrSKT
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
>PULLW ZPTmpPtr1 sockaddr
|
jsr SKT.GetRemAddr
|
||||||
|
|
||||||
ldy #S.SOCKET.T
|
ldy #S.SOCKET.T
|
||||||
lda (ZPTmpPtr1),y
|
lda (ZPPtrSKT),y
|
||||||
tax
|
tax
|
||||||
jmp (J.SKT.connect,x)
|
jmp (J.SKT.connect,x)
|
||||||
|
|
||||||
SKT.connect.RAW
|
SKT.connect.RAW
|
||||||
SKT.connect.DGRAM
|
SKT.connect.DGRAM
|
||||||
|
|
||||||
|
jsr SKT.SetRemAddr
|
||||||
|
|
||||||
SKT.connect.STREAM
|
|
||||||
SKT.connect.SEQPACKET
|
|
||||||
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.listen
|
|
||||||
* Create a new socket
|
|
||||||
* ## C
|
|
||||||
* `int listen(hFD fd);`
|
|
||||||
* ## ASM
|
|
||||||
* **In:**
|
|
||||||
* `>PUSHW addr`
|
|
||||||
* `lda fd`
|
|
||||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.socket`
|
|
||||||
* **Out:**
|
|
||||||
* CC: A = hSOCKET
|
|
||||||
* CS: A = EC
|
|
||||||
*\--------------------------------------
|
|
||||||
SKT.listen
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.New
|
|
||||||
* Create a new socket
|
|
||||||
* ## C
|
|
||||||
* `hSOCKET skt.new(void *template);`
|
|
||||||
* ## ASM
|
|
||||||
* **In:**
|
|
||||||
* `>PUSHW template`
|
|
||||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New`
|
|
||||||
* **Out:**
|
|
||||||
* CC: A = hSOCKET
|
|
||||||
* CS: A = EC
|
|
||||||
*\--------------------------------------
|
|
||||||
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 GetMemPtr
|
|
||||||
>STYA ZPTmpPtr2
|
|
||||||
|
|
||||||
lda #$ff
|
clc
|
||||||
sta TmpByte 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
|
rts
|
||||||
|
|
||||||
.4 lda TmpByte
|
SKT.connect.STREAM
|
||||||
bpl .5 already found an empty slot....
|
>LDYAI K.TCP.WSIZE
|
||||||
|
>SYSCALL getmem
|
||||||
>LDYA ZPTmpPtr2 found one...
|
bcs SKT.connect.99
|
||||||
>STYA ZPPtrSKT save it!
|
txa
|
||||||
stx TmpByte
|
|
||||||
|
|
||||||
.5 lda ZPTmpPtr2
|
ldy #S.SOCKET.SQ.hInMem
|
||||||
clc
|
|
||||||
adc #S.SOCKET
|
|
||||||
sta ZPTmpPtr2
|
|
||||||
bcc .6
|
|
||||||
inc ZPTmpPtr2+1
|
|
||||||
.6 inx
|
|
||||||
cpx #K.SKTTABLE.SIZE
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
lda TmpByte Did we found an empty slot ?
|
|
||||||
bmi .9
|
|
||||||
|
|
||||||
ldy #S.SOCKET-1
|
|
||||||
lda #0
|
|
||||||
|
|
||||||
.70 sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
cpy #S.SOCKET.HDR-1
|
|
||||||
bne .70
|
|
||||||
|
|
||||||
.7 lda (ZPTmpPtr1),y
|
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
dey
|
|
||||||
bpl .7
|
|
||||||
|
|
||||||
lda (ZPPtrSKT)
|
|
||||||
cmp #S.SOCKET.T.STREAM
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
ldy #S.SOCKET.O
|
>LDYAI K.TCP.WSIZE
|
||||||
|
>SYSCALL getmem
|
||||||
|
bcs SKT.connect.99
|
||||||
|
txa
|
||||||
|
|
||||||
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
SKT.connect.SEQPACKET
|
||||||
|
ldy #S.SOCKET.TCP.S
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
|
bne SKT.connect.9
|
||||||
|
|
||||||
and #S.SOCKET.O.ACCEPTCONN
|
jsr SKT.SetRemAddr
|
||||||
bne .8 From Listen, do not send SYN packet
|
|
||||||
|
|
||||||
jsr SKT.NewTCB
|
lda #K.TCP.WSIZE
|
||||||
bcs .99
|
ldy #S.SOCKET.TCP.INFREE
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
ldy #S.SOCKET.TCP.OUTFREE
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
lda /K.TCP.WSIZE
|
||||||
|
ldy #S.SOCKET.TCP.INFREE
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
ldy #S.SOCKET.TCP.OUTFREE
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.OUTNEXTSEQ
|
||||||
|
|
||||||
|
.2 lda A2osX.TIMER16-S.SOCKET.TCP.OUTNEXTSEQ,y
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
iny
|
||||||
|
cpy #S.SOCKET.TCP.OUTNEXTSEQ+4
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
lda #S.TCP.OPTIONS.SYN
|
||||||
|
jsr TCP.OUT.SendOptA Send SYN
|
||||||
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.O
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
ora #S.TCP.OPTIONS.SYN
|
|
||||||
jsr TCP.OUT.SendOptA Send SYN,Only for CLIENT conn,or SYN/ACK if coming from LISTEN
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
ldy #S.SOCKET.TCP.S
|
||||||
lda #S.SOCKET.TCP.S.SYNSENT
|
lda #S.SOCKET.TCP.S.SYNSENT
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
.8 lda TmpByte
|
clc
|
||||||
ora #$80
|
.9 rts
|
||||||
|
|
||||||
|
SKT.connect.9 lda #ERR.SKT.BAD
|
||||||
|
sec
|
||||||
|
SKT.connect.99 rts
|
||||||
|
*/--------------------------------------
|
||||||
|
* # SKT.listen
|
||||||
|
* Listen for connections on a socket
|
||||||
|
* ## C
|
||||||
|
* `int listen(hFD fd);`
|
||||||
|
* ## ASM
|
||||||
|
* **In:**
|
||||||
|
* `lda fd`
|
||||||
|
* `>LIBCALL hLIBTCPIP,LIBTCPIP.listen`
|
||||||
|
* **Out:**
|
||||||
|
* CS: A = EC
|
||||||
|
*\--------------------------------------
|
||||||
|
SKT.listen >SYSCALL GetMemPtr
|
||||||
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
|
ldy #S.SOCKET.T
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
cmp #S.SOCKET.T.STREAM+1
|
||||||
|
bcc .9
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.S
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
lda #S.SOCKET.TCP.S.LISTEN
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
ldy #S.SOCKET.O
|
||||||
|
lda #S.SOCKET.O.ACCEPTCONN
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #ERR.SKT.OOS
|
.9 lda #ERR.SKT.BAD
|
||||||
sec
|
sec
|
||||||
.99 rts
|
rts
|
||||||
|
*/--------------------------------------
|
||||||
|
* # SKT.Accept
|
||||||
|
* Accept a connection on a socket
|
||||||
|
* ## C
|
||||||
|
* `hFD Accept(hFD fd);`
|
||||||
|
* ## ASM
|
||||||
|
* **In:**
|
||||||
|
* `lda fd`
|
||||||
|
* `>LIBCALL hLIBTCPIP,LIBTCPIP.accept`
|
||||||
|
* **Out:**
|
||||||
|
* A = hSocket
|
||||||
|
*\--------------------------------------
|
||||||
|
SKT.Accept >SYSCALL GetMemPtr
|
||||||
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
|
ldy #S.SOCKET.O
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
and #S.SOCKET.O.ACCEPTCONN
|
||||||
|
beq .99
|
||||||
|
|
||||||
|
ldy #S.SOCKET.HQ.TAIL
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
ldy #S.SOCKET.HQ.HEAD
|
||||||
|
cmp (ZPPtrSKT),y Queue Empty
|
||||||
|
beq .9 CS
|
||||||
|
|
||||||
|
pha save tail...
|
||||||
|
inc
|
||||||
|
cmp #S.SOCKET.HQ.MAX
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
|
||||||
|
.1 ldy #S.SOCKET.HQ.TAIL
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
pla
|
||||||
|
clc
|
||||||
|
adc #S.SOCKET.HQ
|
||||||
|
tay
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 lda #ERR.SKT.BAD
|
||||||
|
sec
|
||||||
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SKT.Close
|
* # SKT.Close
|
||||||
* Close socket
|
* Close socket
|
||||||
* **In:**
|
* ## C
|
||||||
* A = hSocket
|
* `int close(int fd);`
|
||||||
* **Out:**
|
* ## ASM
|
||||||
|
* **In:**
|
||||||
|
* `lda fd`
|
||||||
|
* `>LIBCALL hLIBTCPIP,LIBTCPIP.close`
|
||||||
|
* **Out:**
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.Close jsr SKT.Get.I get SKT in ZPPtrSKT, S.SOCKET.T in A
|
SKT.Close >SYSCALL GetMemPtr
|
||||||
bcs .99
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
cmp #S.SOCKET.T.STREAM
|
cmp #S.SOCKET.T.STREAM
|
||||||
beq .10 TCP
|
beq .10 TCP
|
||||||
@ -387,146 +363,6 @@ SKT.Close jsr SKT.Get.I get SKT in ZPPtrSKT, S.SOCKET.T in A
|
|||||||
|
|
||||||
jmp TCP.OUT Try to push FIN/ACK
|
jmp TCP.OUT Try to push FIN/ACK
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SKT.Get
|
|
||||||
* Get Ptr to socket
|
|
||||||
* **In:**
|
|
||||||
* A = hSocket
|
|
||||||
* **Out:**
|
|
||||||
* Y,A = pS.SOCKET
|
|
||||||
*\--------------------------------------
|
|
||||||
SKT.Get jsr SKT.Get.I
|
|
||||||
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>LDYA ZPPtrSKT
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
|
|
||||||
SKT.Get.I and #$7f
|
|
||||||
|
|
||||||
cmp #K.SKTTABLE.SIZE
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
pha
|
|
||||||
lda hSocketTable
|
|
||||||
>SYSCALL GetMemPtr
|
|
||||||
>STYA ZPPtrSKT
|
|
||||||
|
|
||||||
pla
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
stz .1+1
|
|
||||||
lsr
|
|
||||||
ror .1+1
|
|
||||||
lsr
|
|
||||||
ror .1+1
|
|
||||||
lsr
|
|
||||||
ror .1+1
|
|
||||||
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda ZPPtrSKT
|
|
||||||
clc
|
|
||||||
.1 adc #$ff
|
|
||||||
sta ZPPtrSKT
|
|
||||||
|
|
||||||
pla
|
|
||||||
adc ZPPtrSKT+1
|
|
||||||
sta ZPPtrSKT+1
|
|
||||||
|
|
||||||
.8 lda (ZPPtrSKT)
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 lda #ERR.SKT.BAD
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.GetTable
|
|
||||||
* Get socket table
|
|
||||||
* **In:**
|
|
||||||
* **Out:**
|
|
||||||
* Y,A = pS.SOCKET
|
|
||||||
*\--------------------------------------
|
|
||||||
SKT.GetTable lda hSocketTable
|
|
||||||
>SYSCALL GetMemPtr
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.Accept
|
|
||||||
* Check for an incoming connection
|
|
||||||
* **In:**
|
|
||||||
* A = hListeningSocket
|
|
||||||
* **Out:**
|
|
||||||
* A = hSocket
|
|
||||||
*\--------------------------------------
|
|
||||||
SKT.Accept jsr SKT.Get.I
|
|
||||||
bcs .9
|
|
||||||
ldy #S.SOCKET.O
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
and #S.SOCKET.O.ACCEPTCONN
|
|
||||||
beq .99
|
|
||||||
|
|
||||||
ldy #S.SOCKET.HQ.TAIL
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
ldy #S.SOCKET.HQ.HEAD
|
|
||||||
cmp (ZPPtrSKT),y Queue Empty
|
|
||||||
beq .9 CS
|
|
||||||
|
|
||||||
pha save tail...
|
|
||||||
inc
|
|
||||||
cmp #S.SOCKET.HQ.MAX
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
|
|
||||||
.1 ldy #S.SOCKET.HQ.TAIL
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
pla
|
|
||||||
clc
|
|
||||||
adc #S.SOCKET.HQ
|
|
||||||
tay
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.99 lda #ERR.SKT.BAD
|
|
||||||
sec
|
|
||||||
.9 rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.MkNod
|
|
||||||
* ## C
|
|
||||||
* `hFD skt.mknod(hSOCKET s);`
|
|
||||||
* ## ASM
|
|
||||||
* **In:**
|
|
||||||
* `lda s`
|
|
||||||
* `>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.MkNod`
|
|
||||||
* **Out:**
|
|
||||||
* CC: A = hFD
|
|
||||||
* CS: A = EC
|
|
||||||
*\--------------------------------------
|
|
||||||
SKT.MkNod sta FD.SSOCK+S.FD.SOCK.HSKT
|
|
||||||
|
|
||||||
>LDYAI S.FD.SOCK
|
|
||||||
>SYSCALL getmem0
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPTmpPtr1
|
|
||||||
|
|
||||||
ldy #S.FD.SOCK-1
|
|
||||||
|
|
||||||
.2 lda FD.SSOCK,y
|
|
||||||
sta (ZPTmpPtr1),y
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
txa
|
|
||||||
* clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SKT.Read (STREAM)
|
* # SKT.Read (STREAM)
|
||||||
* ## C
|
* ## C
|
||||||
* `int skt.read(hFD fd, void *buf, int count);`
|
* `int skt.read(hFD fd, void *buf, int count);`
|
||||||
@ -540,13 +376,14 @@ SKT.MkNod sta FD.SSOCK+S.FD.SOCK.HSKT
|
|||||||
* CC: Y,A = bytes read
|
* CC: Y,A = bytes read
|
||||||
* CS: A = EC
|
* CS: A = EC
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.Read pha
|
SKT.Read >SYSCALL GetMemPtr
|
||||||
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
>PULLW ZPDataInPtr !!!DataOut trashed when sending ACK in TCP.OUT
|
>PULLW ZPDataInPtr !!!DataOut trashed when sending ACK in TCP.OUT
|
||||||
>PULLW ZPDataInLen !!!use DataInPtr/Len
|
>PULLW ZPDataInLen !!!use DataInPtr/Len
|
||||||
pla
|
|
||||||
|
ldy #S.SOCKET.T
|
||||||
SKT.Read.I jsr SKT.Get.I
|
lda (ZPPtrSKT),y
|
||||||
bcs .99
|
|
||||||
cmp #S.SOCKET.T.STREAM
|
cmp #S.SOCKET.T.STREAM
|
||||||
bne .90 bad skt
|
bne .90 bad skt
|
||||||
|
|
||||||
@ -590,14 +427,14 @@ SKT.Read.I jsr SKT.Get.I
|
|||||||
* CC: Y,A = bytes written
|
* CC: Y,A = bytes written
|
||||||
* CS: A = EC
|
* CS: A = EC
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.Write pha
|
SKT.Write >SYSCALL GetMemPtr
|
||||||
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
>PULLW ZPDataInPtr
|
>PULLW ZPDataInPtr
|
||||||
>PULLW ZPDataInLen
|
>PULLW ZPDataInLen
|
||||||
pla
|
|
||||||
|
|
||||||
jsr SKT.Get.I
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
|
ldy #S.SOCKET.T
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
cmp #S.SOCKET.T.STREAM
|
cmp #S.SOCKET.T.STREAM
|
||||||
bne .99
|
bne .99
|
||||||
|
|
||||||
@ -630,14 +467,21 @@ SKT.Write pha
|
|||||||
sec
|
sec
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SKT.Rcvd (DGRAM,RAW)
|
* # SKT.Recv (RAW,DGRAM,SEQPACKET)
|
||||||
* **In:**
|
* # SKT.RecvFrom (RAW,DGRAM,SEQPACKET)
|
||||||
* A = hSocket
|
* hMem recv(hFD fd);
|
||||||
* **Out:**
|
* hMem recv(hFD fd, const struct sockaddr *addr);
|
||||||
* A = hFrame
|
* ## ASM
|
||||||
|
* **In:**
|
||||||
|
* `>PUSHW addr` (RecvFrom)
|
||||||
|
* `lda fd`
|
||||||
|
* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.Recv`
|
||||||
|
* **Out:**
|
||||||
|
* CC: A = hMem
|
||||||
|
* CS: A = EC
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.Rcvd jsr SKT.Get.I
|
SKT.Recv >SYSCALL GetMemPtr
|
||||||
bcs .9
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
ldy #S.SOCKET.HQ.TAIL
|
ldy #S.SOCKET.HQ.TAIL
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
@ -666,11 +510,14 @@ SKT.Rcvd jsr SKT.Get.I
|
|||||||
.99 sec
|
.99 sec
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SKT.Send (DGRAM,RAW)
|
* # SKT.Send (RAW,DGRAM,SEQPACKET)
|
||||||
|
* # SKT.SendTo (RAW,DGRAM,SEQPACKET)
|
||||||
* ## C
|
* ## C
|
||||||
* `int skt.send(hFD fd, const void *buf, int count);`
|
* `int skt.send(hFD fd, const void *buf, int count);`
|
||||||
|
* `int skt.sendto(hFD fd, const void *buf, int count, const struct sockaddr *addr);`
|
||||||
* ## ASM
|
* ## ASM
|
||||||
* **In:**
|
* **In:**
|
||||||
|
* `>PUSHW addr` (SendTo)
|
||||||
* `>PUSHWI count`
|
* `>PUSHWI count`
|
||||||
* `>PUSHW buf`
|
* `>PUSHW buf`
|
||||||
* `lda fd`
|
* `lda fd`
|
||||||
@ -679,13 +526,13 @@ SKT.Rcvd jsr SKT.Get.I
|
|||||||
* CC: Y,A = bytes written
|
* CC: Y,A = bytes written
|
||||||
* CS: A = EC
|
* CS: A = EC
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.Send pha
|
SKT.Send >SYSCALL GetMemPtr
|
||||||
|
>STYA ZPPtrSKT
|
||||||
>PULLW ZPDataInPtr
|
>PULLW ZPDataInPtr
|
||||||
>PULLW ZPDataInLen
|
>PULLW ZPDataInLen
|
||||||
pla
|
|
||||||
|
|
||||||
jsr SKT.Get.I
|
ldy #S.SOCKET.T
|
||||||
bcs SKT.Send.9
|
lda (ZPPtrSKT),y
|
||||||
|
|
||||||
cmp #S.SOCKET.T.DGRAM
|
cmp #S.SOCKET.T.DGRAM
|
||||||
beq SKT.Send.UDP
|
beq SKT.Send.UDP
|
||||||
@ -719,8 +566,152 @@ SKT.Send.UDP.8 jsr SKT.SetFrameOutDstIP
|
|||||||
jsr SKT.CopyDataInToOut
|
jsr SKT.CopyDataInToOut
|
||||||
|
|
||||||
jmp FRM.SendIP
|
jmp FRM.SendIP
|
||||||
|
*/--------------------------------------
|
||||||
|
* # SKT.GetTable
|
||||||
|
* Get socket table
|
||||||
|
* ## C
|
||||||
|
* `void * skt.gettable();`
|
||||||
|
* ## ASM
|
||||||
|
* **In:**
|
||||||
|
* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.GetTable`
|
||||||
|
* **Out:**
|
||||||
|
*\--------------------------------------
|
||||||
|
SKT.GetTable >LDYA L.SKT.Table
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.GetLocAddr >PULLW ZPTmpPtr1
|
||||||
|
|
||||||
|
ldy #S.SOCKADDR-1
|
||||||
|
|
||||||
|
.1 lda (ZPTmpPtr1),y
|
||||||
|
sta SKT.LOC.ADDR,y
|
||||||
|
dey
|
||||||
|
bne .1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.GetRemAddr >PULLW ZPTmpPtr1
|
||||||
|
|
||||||
|
ldy #S.SOCKADDR-1
|
||||||
|
|
||||||
|
.1 lda (ZPTmpPtr1),y
|
||||||
|
sta SKT.REM.ADDR,y
|
||||||
|
dey
|
||||||
|
bne .1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.SetLocAddr ldy #S.SOCKET.LOC.PORT+1
|
||||||
|
|
||||||
|
.1 lda SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
dey
|
||||||
|
cpy #S.SOCKET.LOC.ADDR-1
|
||||||
|
bne .1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1
|
||||||
|
|
||||||
|
.1 lda SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
dey
|
||||||
|
cpy #S.SOCKET.REM.ADDR-1
|
||||||
|
bne .1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.FindMatchingLocRem
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 lda SKT.TABLE,x
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
>SYSCALL GetMemPtr
|
||||||
|
>STYA ZPTmpPtr1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.2 lda (ZPTmpPtr1),y
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
ldy #S.SOCKET.LOC.PORT This Socket is bound to 0.0.0.0,check only LOC port
|
||||||
|
|
||||||
|
.3 lda (ZPTmpPtr1),y
|
||||||
|
|
||||||
|
.4 cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||||
|
bne .8
|
||||||
|
iny
|
||||||
|
cpy #S.SOCKET.REM.ADDR
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
lda SKT.REM.ADDR
|
||||||
|
cmp #$ff FF.FF.FF.FF, Broadcast ?
|
||||||
|
bne .5
|
||||||
|
|
||||||
|
ldy #S.SOCKET.O
|
||||||
|
lda (ZPTmpPtr1),y
|
||||||
|
and #S.SOCKET.O.BROADCAST
|
||||||
|
beq .9 this socket does not accept broadcast
|
||||||
|
|
||||||
|
ldy #S.SOCKET.REM.PORT Boradcast, check port only
|
||||||
|
|
||||||
|
.5 lda (ZPTmpPtr1),y
|
||||||
|
cmp SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
|
||||||
|
bne .9 wrong remote host, exit....
|
||||||
|
iny
|
||||||
|
cpy #S.SOCKET.REM.PORT+2
|
||||||
|
bne .5
|
||||||
|
|
||||||
|
>LDYA ZPTmpPtr1 x = SKT.TABLE index
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 inx
|
||||||
|
cpx #K.SKTTABLE.SIZE
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SKT.FindMatchingLoc
|
||||||
|
|
||||||
|
ldy #S.SOCKET.LOC.PORT+1
|
||||||
|
phy
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 lda SKT.TABLE,x
|
||||||
|
beq .7
|
||||||
|
|
||||||
|
>SYSCALL GetMemPtr
|
||||||
|
>STYA ZPTmpPtr1
|
||||||
|
|
||||||
|
ply
|
||||||
|
phy
|
||||||
|
|
||||||
|
.2 lda (ZPTmpPtr1),y
|
||||||
|
cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
|
||||||
|
bne .7
|
||||||
|
dey
|
||||||
|
cpy #S.SOCKET.LOC.ADDR-1
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
ply
|
||||||
|
|
||||||
|
>LDYA ZPTmpPtr1 x = SKT.TABLE index
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.7 inx
|
||||||
|
cpx #K.SKTTABLE.SIZE
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ply
|
||||||
|
|
||||||
|
* sec
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* ZPPtrSKT -> actual socket
|
* ZPPtrSKT -> actual socket
|
||||||
* A = hSocket or hFrame
|
* A = hSocket or hFrame
|
||||||
@ -1239,52 +1230,9 @@ SKT.AckDataToSktOut
|
|||||||
|
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.NewTCB >LDYAI S.TCB
|
SKT.NewTCB
|
||||||
>SYSCALL getmem0
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA .4+1
|
|
||||||
txa
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SQ.hTCB
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
lda #K.TCP.WSIZE
|
|
||||||
sta SKT.TCBCache+S.SOCKET.TCP.INFREE
|
|
||||||
sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE
|
|
||||||
lda /K.TCP.WSIZE
|
|
||||||
sta SKT.TCBCache+S.SOCKET.TCP.INFREE+1
|
|
||||||
sta SKT.TCBCache+S.SOCKET.TCP.OUTFREE+1
|
|
||||||
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.2 lda A2osX.TIMER16,x
|
|
||||||
sta SKT.TCBCache+S.SOCKET.TCP.OUTNEXTSEQ,x
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
>LDYAI K.TCP.WSIZE
|
|
||||||
>SYSCALL getmem
|
|
||||||
bcs .9
|
|
||||||
txa
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SQ.hInMem
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
>LDYAI K.TCP.WSIZE
|
|
||||||
>SYSCALL getmem
|
|
||||||
bcs .9
|
|
||||||
txa
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SQ.hOutMem
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
ldx #S.TCB-1
|
|
||||||
|
|
||||||
.3 lda SKT.TCBCache,x
|
|
||||||
.4 sta $ffff,x
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
@ -1338,7 +1286,7 @@ SKT.Destroy ldy #S.SOCKET.SQ.hOutMem
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.SetFrameOutDstIP
|
SKT.SetFrameOutDstIP
|
||||||
ldy #S.SOCKET.DST.ADDR
|
ldy #S.SOCKET.REM.ADDR
|
||||||
ldx #4
|
ldx #4
|
||||||
|
|
||||||
.1 lda (ZPPtrSKT),y
|
.1 lda (ZPPtrSKT),y
|
||||||
@ -1358,7 +1306,7 @@ SKT.SetFrameOutDstIP
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.SetFrameOutTCPUDPPorts
|
SKT.SetFrameOutTCPUDPPorts
|
||||||
ldy #S.SOCKET.SRC.PORT
|
ldy #S.SOCKET.LOC.PORT
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
tax
|
tax
|
||||||
iny
|
iny
|
||||||
@ -1369,7 +1317,7 @@ SKT.SetFrameOutTCPUDPPorts
|
|||||||
txa
|
txa
|
||||||
sta (ZPFrameOutPtr),y
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
ldy #S.SOCKET.DST.PORT
|
ldy #S.SOCKET.REM.PORT
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
tax
|
tax
|
||||||
iny
|
iny
|
||||||
|
@ -3,80 +3,43 @@ PREFIX /A2OSX.BUILD
|
|||||||
AUTO 4,1
|
AUTO 4,1
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN jsr IP.FillSKT.TemplateSrcDstIPP
|
TCP.IN jsr FRM.GetTargetSKT
|
||||||
|
|
||||||
|
jsr SKT.FindMatchingLocRem
|
||||||
|
bcs TCP.IN.JMP.CLOSED no socket, go discard
|
||||||
|
|
||||||
lda hSocketTable
|
|
||||||
>SYSCALL GetMemPtr
|
|
||||||
>STYA ZPPtrSKT
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
ldx #0
|
ldy #S.SOCKET.PROTO
|
||||||
|
|
||||||
.3 lda (ZPPtrSKT)
|
|
||||||
beq .7
|
|
||||||
cmp #S.SOCKET.T.STREAM
|
|
||||||
bne .7
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SRC.ADDR
|
|
||||||
|
|
||||||
.4 lda SKT.Template,y
|
|
||||||
cmp (ZPPtrSKT),y
|
|
||||||
bne .7 Not for this socket...
|
|
||||||
|
|
||||||
iny
|
|
||||||
cpy #S.SOCKET.SRC.PORT+2
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
ldy #S.SOCKET.O
|
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
and #S.SOCKET.O.ACCEPTCONN Listening socket?
|
cmp #S.SOCKET.T.TCP
|
||||||
beq .5 no, go check if Dst Match
|
bne TCP.IN.JMP.CLOSED wrong protocol, go discard
|
||||||
|
|
||||||
ldy #S.TCP.OPTIONS yes, only accept SYN packet
|
|
||||||
lda (ZPFrameInPtr),y
|
|
||||||
|
|
||||||
cmp #S.TCP.OPTIONS.SYN SYN only, if SYN.ACK, pass to regular socket
|
|
||||||
beq TCP.IN.JMP.LISTEN
|
|
||||||
|
|
||||||
.5 ldy #S.SOCKET.DST.ADDR
|
|
||||||
|
|
||||||
.6 lda SKT.Template,y regular socket, check remote ADDR/PORT
|
|
||||||
cmp (ZPPtrSKT),y
|
|
||||||
bne .7
|
|
||||||
iny
|
|
||||||
cpy #S.SOCKET.DST.PORT+2
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
ldy #S.TCP.OPTIONS
|
ldy #S.TCP.OPTIONS
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
and #S.TCP.OPTIONS.RST RST ? go Kill this socket.
|
and #S.TCP.OPTIONS.RST RST ? go Kill this socket...
|
||||||
bne TCP.IN.RST
|
bne TCP.IN.RST ...and discard frame
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
ldy #S.SOCKET.TCP.S
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
cmp #S.SOCKET.TCP.S.TIMEWT+1
|
|
||||||
bcs *
|
|
||||||
asl
|
asl
|
||||||
tax
|
tax
|
||||||
|
|
||||||
jmp (J.TCP.IN,x)
|
jmp (J.TCP.IN,x)
|
||||||
|
*--------------------------------------
|
||||||
.7 lda ZPPtrSKT
|
TCP.IN.RST jsr SKT.Destroy
|
||||||
clc
|
*--------------------------------------
|
||||||
adc #S.SOCKET
|
TCP.IN.JMP.CLOSED
|
||||||
sta ZPPtrSKT
|
lda hFrameIn
|
||||||
bcc .8
|
>SYSCALL FreeMem
|
||||||
inc ZPPtrSKT+1
|
|
||||||
|
|
||||||
.8 inx
|
|
||||||
cpx #K.SKTTABLE.SIZE
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
.9 clc Discard frame
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.RST jmp SKT.Destroy
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.IN.JMP.LISTEN
|
TCP.IN.JMP.LISTEN
|
||||||
|
ldy #S.TCP.OPTIONS SYN Received, send SYN.ACK packet
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
cmp #S.TCP.OPTIONS.SYN
|
||||||
|
bne TCP.IN.JMP.CLOSED
|
||||||
|
|
||||||
|
|
||||||
lda #S.SOCKET.T.STREAM
|
lda #S.SOCKET.T.STREAM
|
||||||
sta SKT.Template+S.SOCKET.T
|
sta SKT.Template+S.SOCKET.T
|
||||||
stz SKT.Template+S.SOCKET.O
|
stz SKT.Template+S.SOCKET.O
|
||||||
@ -84,8 +47,6 @@ TCP.IN.JMP.LISTEN
|
|||||||
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
|
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
|
||||||
sta SKT.Template+S.SOCKET.TCP.O
|
sta SKT.Template+S.SOCKET.TCP.O
|
||||||
|
|
||||||
jsr ARP.AddFromFrameInPtr
|
|
||||||
|
|
||||||
>PUSHW L.SKT.Template
|
>PUSHW L.SKT.Template
|
||||||
|
|
||||||
jsr SKT.New Assign OUTNEXTSEQ
|
jsr SKT.New Assign OUTNEXTSEQ
|
||||||
@ -99,6 +60,8 @@ TCP.IN.JMP.LISTEN
|
|||||||
|
|
||||||
bcs .99 Queued successfully ?
|
bcs .99 Queued successfully ?
|
||||||
|
|
||||||
|
jsr ARP.AddFromFrameInPtr
|
||||||
|
|
||||||
.1 lda #$ff
|
.1 lda #$ff
|
||||||
sta ZPPtrSKT
|
sta ZPPtrSKT
|
||||||
.2 lda #$ff
|
.2 lda #$ff
|
||||||
@ -290,9 +253,6 @@ TCP.IN.JMP.CLOSING
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.TIMEWT
|
TCP.IN.JMP.TIMEWT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.CLOSED
|
|
||||||
jmp SKT.Destroy
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.IN.ACKTheSYN
|
TCP.IN.ACKTheSYN
|
||||||
ldy #S.TCP.SEQNUM+3 Get Remote SEQ
|
ldy #S.TCP.SEQNUM+3 Get Remote SEQ
|
||||||
ldx #3
|
ldx #3
|
||||||
|
@ -3,63 +3,25 @@ PREFIX /A2OSX.BUILD
|
|||||||
AUTO 4,1
|
AUTO 4,1
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
UDP.IN jsr IP.FillSKT.TemplateSrcDstIPP
|
UDP.IN jsr FRM.GetTargetSKT
|
||||||
|
|
||||||
|
jsr SKT.FindMatchingLocRem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
lda hSocketTable
|
|
||||||
>SYSCALL GetMemPtr
|
|
||||||
>STYA ZPPtrSKT
|
>STYA ZPPtrSKT
|
||||||
|
|
||||||
ldx #0
|
ldy #S.SOCKET.PROTO
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
.3 lda (ZPPtrSKT)
|
cmp #S.IP.PROTOCOL.UDP
|
||||||
beq .7
|
bne .9
|
||||||
cmp #S.SOCKET.T.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 SKT.Template,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 SKT.Template,y
|
|
||||||
bne .7
|
|
||||||
iny
|
|
||||||
cpy #S.SOCKET.DST.PORT+2
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
lda hFrameIn
|
lda hFrameIn
|
||||||
jsr SKT.AddToQueueA
|
jsr SKT.AddToQueueA
|
||||||
bcs .9 Q full, discard...
|
|
||||||
|
|
||||||
rts DO NOT Discard this queued frame
|
|
||||||
|
|
||||||
.7 lda ZPPtrSKT
|
|
||||||
clc
|
|
||||||
adc #S.SOCKET
|
|
||||||
sta ZPPtrSKT
|
|
||||||
bcc .8
|
bcc .8
|
||||||
inc ZPPtrSKT+1
|
|
||||||
|
.9 lda hFrameIn Q full, discard...
|
||||||
.8 inx
|
|
||||||
cpx #K.SKTTABLE.SIZE
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
.9 lda hFrameIn
|
|
||||||
>SYSCALL FreeMem
|
>SYSCALL FreeMem
|
||||||
rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.UDP
|
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.UDP
|
||||||
|
@ -4,7 +4,7 @@ AUTO 4,1
|
|||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF LIB/LIBTCPIP.O
|
.TF LIB/LIBTCPIP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
@ -71,18 +71,23 @@ CS.START cld
|
|||||||
.DA HST.GETBYNAME
|
.DA HST.GETBYNAME
|
||||||
.DA HST.GETBYADDR
|
.DA HST.GETBYADDR
|
||||||
|
|
||||||
.DA SKT.New
|
.DA SKT.Socket
|
||||||
.DA SKT.Close
|
.DA SKT.Bind
|
||||||
.DA SKT.GetTable
|
.DA SKT.Connect
|
||||||
.DA SKT.Get
|
.DA SKT.Listen
|
||||||
|
|
||||||
.DA SKT.Accept
|
.DA SKT.Accept
|
||||||
.DA SKT.MkNod
|
.DA SKT.Close
|
||||||
|
|
||||||
.DA SKT.Read
|
.DA SKT.Read
|
||||||
.DA SKT.Write
|
.DA SKT.Write
|
||||||
.DA SKT.Rcvd
|
.DA SKT.Rcvd
|
||||||
.DA SKT.Send
|
.DA SKT.Send
|
||||||
|
|
||||||
|
.DA SKT.RcvdFrom
|
||||||
|
.DA SKT.SendTo
|
||||||
|
|
||||||
|
.DA SKT.GetTable
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
L.DEVNAME .DA DEVNAME
|
L.DEVNAME .DA DEVNAME
|
||||||
L.MSG.DEV.KO .DA MSG.DEV.KO
|
L.MSG.DEV.KO .DA MSG.DEV.KO
|
||||||
@ -110,6 +115,7 @@ L.DNS.MSG .DA DNS.MSG
|
|||||||
L.ARP.CACHE .DA ARP.CACHE
|
L.ARP.CACHE .DA ARP.CACHE
|
||||||
L.DNS.CACHE .DA DNS.CACHE
|
L.DNS.CACHE .DA DNS.CACHE
|
||||||
L.SKT.Template .DA SKT.Template
|
L.SKT.Template .DA SKT.Template
|
||||||
|
L.SKT.Table .DA SKT.Table
|
||||||
L.HST.SScanF .DA HST.SScanF
|
L.HST.SScanF .DA HST.SScanF
|
||||||
L.IOCTL .DA IOCTL
|
L.IOCTL .DA IOCTL
|
||||||
L.DCB.NIC .DA DCB.NIC
|
L.DCB.NIC .DA DCB.NIC
|
||||||
@ -142,13 +148,7 @@ LIB.LOAD ldx RefCount
|
|||||||
jsr ARP.CLEAR
|
jsr ARP.CLEAR
|
||||||
|
|
||||||
jsr DNS.CLEAR
|
jsr DNS.CLEAR
|
||||||
|
|
||||||
>LDYAI K.SKTTABLE.SIZE*S.SOCKET
|
|
||||||
>SYSCALL getmem0
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
stx hSocketTable
|
|
||||||
|
|
||||||
jsr CFG.Init
|
jsr CFG.Init
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
@ -161,18 +161,13 @@ LIB.UNLOAD dec RefCount
|
|||||||
bne LIB.UNLOAD.8
|
bne LIB.UNLOAD.8
|
||||||
|
|
||||||
lda IPCFG+S.IPCFG.hFD
|
lda IPCFG+S.IPCFG.hFD
|
||||||
beq .1
|
beq LIB.UNLOAD.8
|
||||||
|
|
||||||
>PUSHWI 0
|
>PUSHWI 0
|
||||||
>PUSHBI IOCTL.CLOSE
|
>PUSHBI IOCTL.CLOSE
|
||||||
lda IPCFG+S.IPCFG.hFD
|
lda IPCFG+S.IPCFG.hFD
|
||||||
>SYSCALL IOCTL
|
>SYSCALL IOCTL
|
||||||
|
|
||||||
.1 lda hSocketTable
|
|
||||||
beq LIB.UNLOAD.8
|
|
||||||
|
|
||||||
>SYSCALL FreeMem
|
|
||||||
|
|
||||||
LIB.UNLOAD.8 clc
|
LIB.UNLOAD.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -290,6 +285,8 @@ CFG.hCfgFile .BS 1
|
|||||||
CFG.IP .BS 4
|
CFG.IP .BS 4
|
||||||
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
|
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
SKT.TABLE .BS K.SKTTABLE.SIZE
|
||||||
|
*--------------------------------------
|
||||||
FD.SSOCK .BS 1 S.FD.HANDLER
|
FD.SSOCK .BS 1 S.FD.HANDLER
|
||||||
.DA #S.FD.T.SSOCK
|
.DA #S.FD.T.SSOCK
|
||||||
.BS 1 S.FD.SOCK.HSKT
|
.BS 1 S.FD.SOCK.HSKT
|
||||||
@ -298,6 +295,7 @@ FD.SSOCK .BS 1 S.FD.HANDLER
|
|||||||
.DA #LIBTCPIP.SKT.Read
|
.DA #LIBTCPIP.SKT.Read
|
||||||
.DA #LIBTCPIP.SKT.Write
|
.DA #LIBTCPIP.SKT.Write
|
||||||
.DA #0 S.FD.SOCK.STATUS
|
.DA #0 S.FD.SOCK.STATUS
|
||||||
|
.DA #AF.INET S.SOCKET.AF
|
||||||
.BS 1 S.SOCKET.T
|
.BS 1 S.SOCKET.T
|
||||||
.BS 1 S.SOCKET.PROTO
|
.BS 1 S.SOCKET.PROTO
|
||||||
FD.SSOCK.SIZE .EQ *-FD.SSOCK
|
FD.SSOCK.SIZE .EQ *-FD.SSOCK
|
||||||
@ -358,19 +356,15 @@ FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE
|
|||||||
FRM.QUEUE.LenL .BS K.FRMQUEUE.SIZE
|
FRM.QUEUE.LenL .BS K.FRMQUEUE.SIZE
|
||||||
FRM.QUEUE.LenH .BS K.FRMQUEUE.SIZE
|
FRM.QUEUE.LenH .BS K.FRMQUEUE.SIZE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.TABLE .BS K.SKTTABLE.SIZE
|
|
||||||
*--------------------------------------
|
|
||||||
RefCount .DA #0
|
RefCount .DA #0
|
||||||
hSocketTable .BS 1
|
|
||||||
DYNPORT.LAST .DA K.DYNPORT.START
|
DYNPORT.LAST .DA K.DYNPORT.START
|
||||||
hDNSSocket1 .BS 1
|
hDNSSocket1 .BS 1
|
||||||
hDNSSocket2 .BS 1
|
hDNSSocket2 .BS 1
|
||||||
DNS.TmpCache .BS S.DNSCACHE
|
DNS.TmpCache .BS S.DNSCACHE
|
||||||
ARP.TmpCache .BS S.ARP
|
ARP.TmpCache .BS S.ARP
|
||||||
SKT.Template .BS S.SOCKET
|
SKT.Template .BS S.SOCKET
|
||||||
SKT.TCBCache .BS S.TCB
|
SKT.LOC.ADDR .BS S.SOCKADDR
|
||||||
SKT.ADDRCache .BS S.SOCKADDR
|
SKT.REM.ADDR .BS S.SOCKADDR
|
||||||
TmpByte .BS 1
|
|
||||||
TmpDWord .BS 4
|
TmpDWord .BS 4
|
||||||
TmpOffset .BS 2
|
TmpOffset .BS 2
|
||||||
hFrameIn .BS 1
|
hFrameIn .BS 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user