Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-11-07 22:48:48 +01:00
parent 563d695a1b
commit 617bf82063
7 changed files with 87 additions and 72 deletions

Binary file not shown.

Binary file not shown.

View File

@ -172,7 +172,7 @@ CS.RUN.OPENSKT ldx #3
>PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcc CS.RUN.SEND.ECHO

View File

@ -56,6 +56,7 @@ LIBTCPIP.RecvFrom .EQ 52
LIBTCPIP.SendTo .EQ 54
LIBTCPIP.GetTable .EQ 56
LIBTCPIP.setsockopt .EQ 58
*--------------------------------------
ERR.SKT.OOS .EQ $BF
ERR.SKT.BUSY .EQ $BE

View File

@ -51,7 +51,6 @@ SKT.Socket.DSOCK
txa
clc
.9 rts
SKT.Socket.STREAM
lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP
@ -66,18 +65,17 @@ SKT.Socket.STREAM
jsr SKT.Socket.FindFree
bcs .9
ldy #FD.SSOCK.SIZE-1
.1 lda FD.SSOCK,y
sta (ZPTmpPtr1),y
dey
bpl .1
txa
clc
.9 rts
SKT.Socket.FindFree
ldy #0
@ -93,7 +91,7 @@ SKT.Socket.FindFree
sec
rts
.2 txa x = hFD
.2 txa
sta SKT.TABLE,y
clc
rts
@ -151,7 +149,7 @@ SKT.connect >SYSCALL GetMemPtr
>STYA ZPPtrSKT
jsr SKT.PullRemAddr
ldy #S.SOCKET.T
lda (ZPPtrSKT),y
tax
@ -164,7 +162,7 @@ SKT.connect.SEQPACKET
jsr SKT.SetRemAddr
jsr SKT.NewTCB
bcs SKT.connect.99
lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN
bcs .9
@ -176,7 +174,7 @@ SKT.connect.SEQPACKET
.9 lda #ERR.SKT.BAD
sec
SKT.connect.99 rts
SKT.connect.99 rts
*/--------------------------------------
* # Listen
* Listen for connections on a socket
@ -237,10 +235,10 @@ SKT.Accept >SYSCALL GetMemPtr
ldy #S.SOCKET.HQ.TAIL
lda (ZPPtrSKT),y
ldy #S.SOCKET.HQ.HEAD
cmp (ZPPtrSKT),y Queue Empty
cmp (ZPPtrSKT),y
beq .9 CS
pha save tail...
pha
inc
cmp #S.SOCKET.HQ.MAX
bne .1
@ -279,17 +277,15 @@ SKT.shutdown pha
lda (ZPPtrSKT),y
and #S.SOCKET.O.ACCEPTCONN
bne SKT.shutdown.LISTEN
ldy #S.SOCKET.T
lda (ZPPtrSKT),y
tax
jmp (J.SKT.shutdown,x)
SKT.shutdown.LISTEN
SKT.shutdown.RAW
SKT.shutdown.DGRAM
SKT.shutdown.SEQPACKET
.1 ldy #S.SOCKET.HQ.TAIL
lda (ZPPtrSKT),y
ldy #S.SOCKET.HQ.HEAD
@ -317,24 +313,22 @@ SKT.shutdown.SEQPACKET
bra .1
.3 pla get hFD...
ldx #0
.4 cmp SKT.TABLE,x
beq .5
inx
cpx #K.SKTTABLE.SIZE
bne .4
.5 stz SKT.TABLE,x
>SYSCALL freemem
clc
rts
SKT.shutdown.STREAM
pla
ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.CLWAIT
@ -350,7 +344,6 @@ SKT.shutdown.STREAM
lda (ZPPtrSKT),y
ora #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
sta (ZPPtrSKT),y
jmp TCP.OUT
*/--------------------------------------
* # Read (STREAM)
@ -368,7 +361,6 @@ SKT.shutdown.STREAM
*\--------------------------------------
SKT.Read >SYSCALL GetMemPtr
>STYA ZPPtrSKT
>PULLW ZPDataInPtr !!!DataOut trashed when sending ACK in TCP.OUT
>PULLW ZPDataInLen !!!use DataInPtr/Len
@ -419,7 +411,6 @@ SKT.Read >SYSCALL GetMemPtr
*\--------------------------------------
SKT.Write >SYSCALL GetMemPtr
>STYA ZPPtrSKT
>PULLW ZPDataInPtr
>PULLW ZPDataInLen
@ -474,13 +465,10 @@ SKT.Write >SYSCALL GetMemPtr
SKT.RecvFrom pha
>PULLW ZPTmpPtr1 addr
pla
sec
.HS 90 BCC
SKT.Recv clc
php
>SYSCALL GetMemPtr
>STYA ZPPtrSKT
@ -560,7 +548,7 @@ SKT.Recv clc
.99 plp
lda #ERR.SKT.BAD
sec
rts
rts
.90 plp
lda #0 no data
@ -590,19 +578,15 @@ SKT.Send clc
>SYSCALL GetMemPtr
>STYA ZPPtrSKT
plp
>PULLW ZPDataInPtr
>PULLW ZPDataInLen
>PULLW ZPDataInLen
bcc .1
jsr SKT.PullRemAddr
jsr SKT.SetRemAddr
.1 ldy #S.SOCKET.T
lda (ZPPtrSKT),y
tax
jmp (J.SKT.send,x)
jmp (J.SKT.send,x)
*--------------------------------------
SKT.Send.RAW ldy #S.SOCKET.PROTO
lda (ZPPtrSKT),y
@ -619,7 +603,7 @@ SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP
jsr SKT.SetFrameOutTCPUDPPorts
SKT.Send.DGRAM.8
jsr SKT.SetFrameOutDstIP
jsr SKT.CopyDataInToOut
jsr SKT.CopyDataInToOut
jmp FRM.SendIP
*--------------------------------------
SKT.Send.STREAM lda #ERR.SKT.BAD
@ -635,15 +619,33 @@ SKT.Send.SEQPACKET
* `void * gettable();`
* ## ASM
* **In:**
* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.GetTable`
* `>LIBCALL hLIBTCPIP,LIBTCPIP.GetTable`
* ## RETURN VALUE
*\--------------------------------------
SKT.GetTable >LDYA L.SKT.Table
clc
rts
*/--------------------------------------
* # SetSockOpt
* Set Socket Options
* ## C
* `int setsockopt(hFD fd, short int opts);`
* ## ASM
* **In:**
* `>PUSHWI opts`
* `lda fd`
* `>LIBCALL hLIBTCPIP,LIBTCPIP.SetSockOpt`
* ## RETURN VALUE
*\--------------------------------------
SKT.setsockopt >SYSCALL GetMemPtr
>STYA ZPPtrSKT
>PULLA
ldy #S.SOCKET.O
ora (ZPPtrSKT),y
sta (ZPPtrSKT),y
clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
SKT.PullLocAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y
@ -651,7 +653,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1
dey
bpl .1
rts
*--------------------------------------
*--------------------------------------
SKT.PullRemAddr >PULLW ZPTmpPtr1
ldy #S.SOCKADDR-1
.1 lda (ZPTmpPtr1),y
@ -666,7 +668,6 @@ SKT.SetLocAddr ldy #S.SOCKET.LOC.PORT+1
dey
cpy #S.SOCKET.LOC.ADDR
bcs .1
* clc
rts
*--------------------------------------
SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1
@ -675,7 +676,6 @@ SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1
dey
cpy #S.SOCKET.REM.ADDR
bcs .1
* clc
rts
*--------------------------------------
SKT.FindMatchingLocRem
@ -699,7 +699,7 @@ SKT.FindMatchingLocRem
.2 lda (ZPTmpPtr1),y
bne .4
ldy #S.SOCKET.LOC.PORT This Socket is bound to 0.0.0.0,check only LOC port
ldy #S.SOCKET.LOC.PORT bound to 0.0.0.0,check only LOC port
.3 lda (ZPTmpPtr1),y
@ -713,11 +713,11 @@ SKT.FindMatchingLocRem
lda (ZPTmpPtr1),y
and #S.SOCKET.O.ACCEPTCONN
beq .6
ldy #S.TCP.OPTIONS Listening, only SYN packet....
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN
beq .7 a SYN recieved on a LISTEN socket, ok
beq .7 SYN recieved on a LISTEN socket, ok
bne .8 bad packet for this listening
.6 lda SKT.REM.ADDR+S.SOCKADDR.ADDR
@ -733,7 +733,7 @@ SKT.FindMatchingLocRem
bra .5
.41 ldy #S.SOCKET.REM.ADDR
.5 lda (ZPTmpPtr1),y
cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
bne .8 wrong remote host, exit....
@ -788,9 +788,6 @@ SKT.FindMatchingLoc
* sec
.9 rts
*--------------------------------------
* ZPPtrSKT -> actual socket
* A = hSocket or hFrame
*--------------------------------------
SKT.AddToQueueA pha
ldy #S.SOCKET.HQ.HEAD
lda (ZPPtrSKT),y
@ -990,7 +987,7 @@ SKT.GetDataFromSktIn
bne .3
lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1
eor SKT.TmpCache+S.SOCKET.TCP.INHEAD+1
beq .7 no more data....
beq .7
.3 lda (ZPTmpPtr2)
pha
@ -1037,7 +1034,6 @@ SKT.GetDataFromSktIn
clc
adc ZPTmpPtr3
sta SKT.TmpCache+S.SOCKET.TCP.INFREE
lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1
adc ZPTmpPtr3+1
sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1
@ -1046,7 +1042,6 @@ SKT.GetDataFromSktIn
sec
sbc ZPTmpPtr3
sta SKT.TmpCache+S.SOCKET.TCP.INUSED
lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1
sbc ZPTmpPtr3+1
sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1
@ -1055,7 +1050,6 @@ SKT.GetDataFromSktIn
clc
adc ZPTmpPtr3
sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3
lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2
adc ZPTmpPtr3+1
sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2
@ -1077,8 +1071,8 @@ SKT.GetDataFromSktIn
>LDYA ZPTmpPtr3
clc
rts
.9
* lda #0 NO DATA
.9
* lda #0
sec
rts
*--------------------------------------
@ -1093,7 +1087,7 @@ SKT.AddDataToSktOut
lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1
sbc ZPDataInLen+1
bcc .9 Not enough room in Q
ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y
>SYSCALL GetMemPtr
@ -1339,7 +1333,7 @@ SKT.StoreTCB ldy #S.SOCKET
iny
cpy #S.SOCKET.TCP
bne .1
clc Make CC for successfull exit
clc
SKT.StoreTCB.RTS
rts
*--------------------------------------
@ -1395,7 +1389,7 @@ SKT.SetFrameOutTCPUDPPorts
iny
txa
sta (ZPFrameOutPtr),y
ldy #S.SOCKET.REM.PORT
lda (ZPPtrSKT),y
tax
@ -1414,7 +1408,7 @@ SKT.CopyDataInToOut
pha
lda ZPDataOutPtr+1
pha
lda ZPDataInLen
eor #$ff
tax
@ -1438,13 +1432,12 @@ SKT.CopyDataInToOut
inc ZPDataInPtr+1
inc ZPDataOutPtr+1
bne .1
.9 pla
sta ZPDataOutPtr+1
pla
sta ZPDataInPtr+1
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.SKT
LOAD /A2OSX.SRC/LIB/LIBTCPIP.S

View File

@ -89,6 +89,8 @@ CS.START cld
.DA SKT.SendTo
.DA SKT.GetTable
.DA SKT.setsockopt
*--------------------------------------
L.DEVNAME .DA DEVNAME
L.MSG.DEV.KO .DA MSG.DEV.KO

View File

@ -40,7 +40,8 @@ CS.START cld
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.IPCFG .DA IPCFG
L.Socket .DA Socket
L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE
L.MSG.CFG1 .DA MSG.CFG1
L.MSG.CFG2 .DA MSG.CFG2
L.MSG.CFG.KO .DA MSG.CFG.KO
@ -53,6 +54,7 @@ L.DHCP.REQ .DA DHCP.REQ
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
@ -105,13 +107,27 @@ CS.INIT >LDYA L.LIBTCPIP
sec
rts
*--------------------------------------
CS.RUN >PUSHW L.Socket
CS.RUN >PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcc .1
jmp CS.RUN.KO
.9 jmp CS.RUN.KO
.1 >STA.G hSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>PUSHWI S.SOCKET.O.BROADCAST
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.setsockopt
>PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.CFG1
>SYSCALL puts
@ -236,7 +252,7 @@ CS.DOEVENT lda (pEvent)
CS.QUIT >LDA.G hSocket
beq .1
>SYSCALL fclose
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 lda hLIBTCPIP
>SYSCALL UnloadLib
@ -437,7 +453,7 @@ Wait.TimeOut ldy #TimeOut
rts
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip.o"
LIBTCPIP .AZ "libtcpip"
MSG.CFG1 .AZ "DHCPCLNT:Searching for DHCP servers..."
MSG.CFG2 .AZ "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
MSG.CFG.KO .AZ "DHCPCLNT:Time Out [%h].\r\n"
@ -447,12 +463,15 @@ MSG.CFG.NA .AZ "DHCPCLNT:TCPIP Already configured, exiting."
hLIBTCPIP .BS 1
IPCFG .BS S.IPCFG
*--------------------------------------
Socket .DA #S.SOCKET.T.DGRAM
.BS 3
.HS 00.00.00.00 Socket.Src.Addr
.DA UDP.PORT.DHCPC Socket.Src.Port
.HS FF.FF.FF.FF Socket.Dst.Addr
.DA UDP.PORT.DHCPS Socket.Dst.Port
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS 00.00.00.00 S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPC S.SOCKADDR.PORT
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS FF.FF.FF.FF S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPS S.SOCKADDR.PORT
*--------------------------------------
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .BS 4