Kernel version 0.9 : TCP & MkNodA

This commit is contained in:
Rémy GIBERT 2017-03-09 08:11:44 +01:00
parent 66d20ceba0
commit 635529e795
13 changed files with 130 additions and 99 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -69,6 +69,8 @@ CS.RUN >LDYA L.MSG0
lda #K.SKTTABLE.SIZE lda #K.SKTTABLE.SIZE
sta SocketCount sta SocketCount
>DEBUG
.1 lda (ZPPTR1) .1 lda (ZPPTR1)
beq .7 beq .7
@ -100,13 +102,15 @@ CS.RUN >LDYA L.MSG0
>LDYA L.MSG1 >LDYA L.MSG1
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
.7 clc .7 lda ZPPTR1
lda ZPPTR1 clc
adc #S.SOCKET adc #S.SOCKET
sta ZPPTR1 sta ZPPTR1
lda ZPPTR1+1 lda ZPPTR1+1
adc /S.SOCKET adc /S.SOCKET
sta ZPPTR1+1 sta ZPPTR1+1
dec SocketCount dec SocketCount
bne .1 bne .1

View File

@ -585,6 +585,15 @@ S.NODE.DEV .EQ 5
*-------------------------------------- *--------------------------------------
* S.NODE.LNK * S.NODE.LNK
*-------------------------------------- *--------------------------------------
S.NODE.SSOCK.HSKT .EQ 2
*S.NODE.SSOCK.OPEN .EQ 3
*S.NODE.SSOCK.CLOSE .EQ 4
*S.NODE.SSOCK.READ .EQ 5
*S.NODE.SSOCK.WRITE .EQ 6
*S.NODE.SSOCK.STATUS .EQ 7
*
S.NODE.SSOCK .EQ 8
*--------------------------------------
S.NODE.FIFO.S .EQ 2 S.NODE.FIFO.S .EQ 2
S.NODE.FIFO.S.Opened .EQ 1 S.NODE.FIFO.S.Opened .EQ 1
S.NODE.FIFO.S.Closed .EQ 2 S.NODE.FIFO.S.Closed .EQ 2

View File

@ -39,6 +39,7 @@ S.DHCP.OPTIONS.MASK .EQ 1
S.DHCP.OPTIONS.GW .EQ 3 S.DHCP.OPTIONS.GW .EQ 3
S.DHCP.OPTIONS.DNS .EQ 6 S.DHCP.OPTIONS.DNS .EQ 6
S.DHCP.OPTIONS.DOMAIN .EQ 15 S.DHCP.OPTIONS.DOMAIN .EQ 15
S.DHCP.OPTIONS.MSGTYPE .EQ 53
S.DHCP.OPTIONS.END .EQ 255 S.DHCP.OPTIONS.END .EQ 255
* *
S.DHCP .EQ S.UDP+240 S.DHCP .EQ S.UDP+240

View File

@ -175,12 +175,21 @@ SKT.CloseA cmp #K.SKTTABLE.SIZE
cmp #S.SOCKET.SOCK.RAW cmp #S.SOCKET.SOCK.RAW
beq .8 beq .8
cmp #S.SOCKET.SOCK.STREAM
bne SKT.GetA.9
ldy #S.SOCKET.SO ldy #S.SOCKET.SO
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
bit #S.SOCKET.SO.ACCEPTCONN bit #S.SOCKET.SO.ACCEPTCONN
beq * bne *
ldy #S.SOCKET.TCP.OPTIONS
lda (ZPPtrSKT),y
ora #S.TCP.OPTIONS.FIN
sta (ZPPtrSKT),y
clc
rts
.8 lda #0 .8 lda #0
sta (ZPPtrSKT) sta (ZPPtrSKT)
@ -393,7 +402,7 @@ SKT.Write.TCP ldy #S.SOCKET.TCP.STATUS
jsr SKT.AddDataToSktOut jsr SKT.AddDataToSktOut
bcs .90 bcs .90
jsr TCP.OUT try to push, ignore error.... jsr TCP.OUT.ESTBLSH try to push, ignore error....
clc clc
rts rts

View File

@ -73,6 +73,8 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.STATUS.TIMEWT
bcs *
asl asl
tax tax
jmp (L.TCP.IN.JMP,x) jmp (L.TCP.IN.JMP,x)
@ -91,8 +93,8 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
.9 clc Discard frame .9 clc Discard frame
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.RST txa TCP.IN.RST lda #0
jsr SKT.CloseA sta (ZPPtrSKT)
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -152,15 +154,7 @@ TCP.IN.JMP.LISTEN
dex dex
bpl .4 bpl .4
ldy #S.SOCKET.TCP.STATUS jsr TCP.OUT.SYNACK
lda #S.SOCKET.TCP.STATUS.SYNRCVD
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.OPTIONS
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
sta (ZPPtrSKT),y
jsr TCP.Out
bcs .9 bcs .9
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
@ -172,10 +166,6 @@ TCP.IN.JMP.LISTEN
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNSENT TCP.IN.JMP.SYNSENT
clc
rts
*--------------------------------------
TCP.IN.JMP.SYNRCVD
ldy #S.TCP.OPTIONS only accept ACK packet ldy #S.TCP.OPTIONS only accept ACK packet
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.ACK cmp #S.TCP.OPTIONS.ACK
@ -218,6 +208,10 @@ TCP.IN.JMP.SYNRCVD
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNRCVD
clc
rts
*--------------------------------------
TCP.IN.JMP.ESTBLSH TCP.IN.JMP.ESTBLSH
ldy #S.TCP.OPTIONS ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
@ -292,29 +286,33 @@ TCP.IN.JMP.TIMEWT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
TCP.OUT ldy #S.SOCKET.TCP.OPTIONS TCP.OUT.SYNACK >LDYAI 0
lda (ZPPtrSKT),y
bit #S.TCP.OPTIONS.SYN
beq TCP.OUT.ESTBLSH
>LDYAI 0
jsr TCP.NewFrame jsr TCP.NewFrame
bcs .9 bcs .9
ldx #3
ldy #S.TCP.ACK.NUMBER+3
.1 lda TmpDWord,x
sta (ZPFrameOutPtr),y
dey
dex
bpl .1
ldy #S.TCP.OPTIONS ldy #S.TCP.OPTIONS
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
jsr TCP.SendFrame jsr TCP.SendFrame
bcs .9 bcs .9
ldy #S.TCP.OPTIONS ldy #S.SOCKET.TCP.OPTIONS
lda #0 lda #0
sta (ZPFrameOutPtr),y sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNSENT lda #S.SOCKET.TCP.STATUS.SYNSENT
sta (ZPFrameOutPtr),y sta (ZPPtrSKT),y
clc clc
.9 rts .9 rts
@ -379,12 +377,7 @@ TCP.OUT.ESTBLSH ldy #S.SOCKET.SQ.OUTUSED
ldy #S.SOCKET.TCP.OPTIONS ldy #S.SOCKET.TCP.OPTIONS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
bit #S.TCP.OPTIONS.ACK
beq .7
ldy #S.TCP.OPTIONS ldy #S.TCP.OPTIONS
lda (ZPFrameOutPtr),y
ora #S.TCP.OPTIONS.ACK
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
.7 jsr TCP.SendFrame .7 jsr TCP.SendFrame
@ -392,7 +385,15 @@ TCP.OUT.ESTBLSH ldy #S.SOCKET.SQ.OUTUSED
ldy #S.SOCKET.TCP.OPTIONS ldy #S.SOCKET.TCP.OPTIONS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
and #$ff^S.TCP.OPTIONS.ACK bit #S.TCP.OPTIONS.FIN
beq .70
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.FINWT1
sta (ZPPtrSKT),y
.70 ldy #S.SOCKET.TCP.OPTIONS
lda #0
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
ldx #3 ldx #3

View File

@ -74,13 +74,14 @@ CS.INIT >LDYA L.LIBTCPIP
stz IPCFG stz IPCFG
>LDYA A2OSX.TIMER16 ldx #3
>STYA DHCP.DISC.XID
>STYA DHCP.REQ.XID
>LDYA A2OSX.RANDOM16
>STYA DHCP.DISC.XID+2
>STYA DHCP.REQ.XID+2
.11 lda A2osX.TIMER16,x
sta DHCP.DISC.XID,x
sta DHCP.REQ.XID,x
dex
bpl .11
ldx #5 ldx #5
.2 lda IPCFG+S.IPCFG.MAC,x .2 lda IPCFG+S.IPCFG.MAC,x
sta DHCP.DISC.CHADDR,x sta DHCP.DISC.CHADDR,x
@ -134,7 +135,7 @@ CS.RUN.ROFFER >SYSCALL Sleep
jsr CS.RUN.SKT.RCVD jsr CS.RUN.SKT.RCVD
bcc .1 bcc .1
jsr Wait.Timeout jsr Wait.Timeout
bcc CS.RUN.ROFFER bne CS.RUN.ROFFER
lda #1 lda #1
jmp CS.RUN.KO jmp CS.RUN.KO
@ -170,7 +171,7 @@ CS.RUN.RACK >SYSCALL Sleep
jsr CS.RUN.SKT.RCVD jsr CS.RUN.SKT.RCVD
bcc .1 bcc .1
jsr Wait.Timeout jsr Wait.Timeout
bcc CS.RUN.RACK bne CS.RUN.RACK
lda #2 lda #2
bra CS.RUN.KO bra CS.RUN.KO
@ -250,49 +251,48 @@ CS.QUIT ldy #hSocket
CheckDHCPOffer jsr CheckDHCPXID CheckDHCPOffer jsr CheckDHCPXID
bcs .9 bcs .9
>LDAXI S.DHCP.OPTIONS lda ZPFrameBase
jsr SetFramePtr1AX clc
adc #S.DHCP.OPTIONS
sta ZPFramePtr
lda ZPFrameBase+1
adc /S.DHCP.OPTIONS
sta ZPFramePtr+1
ldy #2 DHCPOffer ? lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPFramePtr),y lda (ZPFramePtr),y
cmp #S.DHCP.OPTIONS.DHCPOffer cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9 bne .9
ldy #S.DHCP.YIADDR+3 ldy #S.DHCP.YIADDR+3
ldx #3 ldx #3
.1 lda (ZPFrameBase),y .1 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.REQIP,x sta DHCP.REQ.OPT.REQIP,x
sta IPCFG+S.IPCFG.IP,x
dey dey
dex dex
bpl .1 bpl .1
ldx #3
ldy #S.IPCFG.IP+3
.2 lda DHCP.REQ.OPT.REQIP,x
sta IPCFG,y
dey
dex
bpl .2
ldy #S.IP.SRC+3 ldy #S.IP.SRC+3
ldx #3 ldx #3
.3 lda (ZPFrameBase),y .3 lda (ZPFrameBase),y
sta DHCP.REQ.OPT.SVRIP,x sta DHCP.REQ.OPT.SVRIP,x
sta IPCFG+S.IPCFG.DHCPSRVR,x
dey dey
dex dex
bpl .3 bpl .3
ldx #3
ldy #S.IPCFG.DHCPSRVR+3
.4 lda DHCP.REQ.OPT.SVRIP,x
sta IPCFG,y
dey
dex
bpl .4
.5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102) .5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102)
bne .6 bne .6
inc ZPFramePtr+1 inc ZPFramePtr+1
.6 lda (ZPFramePtr) .6 lda (ZPFramePtr)
sec sec
adc ZPFramePtr add option len + 1 adc ZPFramePtr add option len + 1
@ -377,10 +377,20 @@ GetDHCPOption.CopyIP
CheckDHCPAck jsr CheckDHCPXID CheckDHCPAck jsr CheckDHCPXID
bcs .9 bcs .9
>LDAXI S.DHCP.OPTIONS lda ZPFrameBase
jsr SetFramePtr1AX clc
adc #S.DHCP.OPTIONS
sta ZPFramePtr
lda ZPFrameBase+1
adc /S.DHCP.OPTIONS
sta ZPFramePtr+1
ldy #2 DHCPAck ? lda (ZPFramePtr)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPFramePtr),y lda (ZPFramePtr),y
cmp #S.DHCP.OPTIONS.DHCPAck cmp #S.DHCP.OPTIONS.DHCPAck
bne .9 bne .9
@ -395,6 +405,7 @@ CheckDHCPAck jsr CheckDHCPXID
*-------------------------------------- *--------------------------------------
CheckDHCPXID ldy #S.DHCP.XID+3 CheckDHCPXID ldy #S.DHCP.XID+3
ldx #3 ldx #3
.1 lda (ZPFrameBase),y .1 lda (ZPFrameBase),y
cmp DHCP.DISC.XID,x same XID ? cmp DHCP.DISC.XID,x same XID ?
bne .9 bne .9
@ -408,25 +419,14 @@ CheckDHCPXID ldy #S.DHCP.XID+3
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
SetFramePtr1AX clc
adc ZPFrameBase
sta ZPFramePtr
txa
adc ZPFrameBase+1
sta ZPFramePtr+1
rts
*--------------------------------------
Init.Timeout ldy #TimeOut Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX lda #TIMEOUT.MAX
sta (pData),y sta (pData),y
rts rts
*-------------------------------------- *--------------------------------------
Wait.TimeOut sec Wait.TimeOut ldy #TimeOut
ldy #TimeOut
lda (pData),y lda (pData),y
beq .9 rts
clc
.9 rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBTCPIP >PSTR "libtcpip.o" LIBTCPIP >PSTR "libtcpip.o"
@ -438,7 +438,6 @@ MSG.CFG.ND >CSTR "DHCPCLNT:No Device, exiting.\r\n"
MSG.CFG.NA >CSTR "DHCPCLNT:TCPIP Already configured, exiting.\r\n" MSG.CFG.NA >CSTR "DHCPCLNT:TCPIP Already configured, exiting.\r\n"
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
IPCFG .BS S.IPCFG IPCFG .BS S.IPCFG
FrameLen .BS 2
*-------------------------------------- *--------------------------------------
Socket .DA #S.SOCKET.SOCK.DGRAM Socket .DA #S.SOCKET.SOCK.DGRAM
.BS 3 .BS 3

View File

@ -171,8 +171,24 @@ K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.MkNodA sec K.MkNodA sta .1+1
rts >PUSHWI S.NODE.SSOCK
>PUSHBI S.MEM.F.INIT0
jsr K.GetMem
bcs .9
>STYA ZPPtr1
ldy #S.NODE.T
lda #S.NODE.T.SSOCK
sta (ZPPtr1),y
ldy #S.NODE.SSOCK.HSKT
.1 lda #$ff
sta (ZPPtr1),y
txa
.9 rts
*/-------------------------------------- */--------------------------------------
* #MKFIFO * #MKFIFO
* return a S.FILE to a new FIFO * return a S.FILE to a new FIFO

View File

@ -384,22 +384,12 @@ SP.DRV.hi lda #$ff
*-------------------------------------- *--------------------------------------
BLK.DRV BLK.DRV
*-------------------------------------- *--------------------------------------
EvtMgrInit EvtMgrInit lda #$A5
* lda #10 sta A2osX.TIMER16
* sta EVTMGR.10TH.CNT WARNING!!!! WRONG BANK!!! lda #$9B
sta A2osX.TIMER16+1
* lda A2osX.HZ lda /EvtMgr.Table
* sta EVTMGR.HZ.CNT
lda MACHID
and #MACHID.TYPE
cmp #MACHID.TYPE.IIc
bne .8
* sta CLRIOUDIS
* sta ENBVBLIIC
.8 lda /EvtMgr.Table
sta pEvent+1 sta pEvent+1
clc clc
rts rts

View File

@ -8,7 +8,11 @@ AUTO 6
SYS.BASL0 .EQ $800 SYS.BASL0 .EQ $800
*-------------------------------------- *--------------------------------------
K.KernelRun jsr TSK.TskMgrRun K.KernelRun jsr TSK.TskMgrRun
stx A2osX.RANDOM16
jsr EVT.GetEvents jsr EVT.GetEvents
txa
eor KBD
sta A2osX.RANDOM16+1
bcs .4 CS=no event bcs .4 CS=no event
jsr TSK.DispatchEvents jsr TSK.DispatchEvents
@ -51,9 +55,7 @@ K.KernelRun jsr TSK.TskMgrRun
.42 bit OPENAPPLE .42 bit OPENAPPLE
bpl K.KernelRun bpl K.KernelRun
inc A2osX.RANDOM16
lda KBD lda KBD
sta A2osX.RANDOM16+1
bpl K.KernelRun bpl K.KernelRun

View File

@ -85,7 +85,6 @@ A2osX.D002 .EQ *
.INB SYS/KERNEL.S.ARG .INB SYS/KERNEL.S.ARG
.INB SYS/KERNEL.S.ENV .INB SYS/KERNEL.S.ENV
*-------------------------------------- *--------------------------------------
.INB SYS/KERNEL.S.CNV
.INB SYS/KERNEL.S.RUN .INB SYS/KERNEL.S.RUN
.INB SYS/KERNEL.S.EVT .INB SYS/KERNEL.S.EVT
.INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.TSK
@ -100,6 +99,7 @@ A2osX.E000 .EQ *
.INB SYS/KERNEL.S.DAT .INB SYS/KERNEL.S.DAT
.INB SYS/KERNEL.S.IRQ .INB SYS/KERNEL.S.IRQ
.INB SYS/KERNEL.S.MEM .INB SYS/KERNEL.S.MEM
.INB SYS/KERNEL.S.CNV
.INB SYS/KERNEL.S.CHR .INB SYS/KERNEL.S.CHR
*-------------------------------------- *--------------------------------------
PullPtr1Ptr2Ptr3 PullPtr1Ptr2Ptr3