Kernel version 0.9 : TCPIP migration, fixed timing issues in DHCPCLNT, Broadcast not cleared properly....and working on TCP....

This commit is contained in:
Rémy GIBERT 2017-01-28 23:05:20 +01:00
parent 9c457ceed4
commit d736762046
14 changed files with 237 additions and 164 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -14,7 +14,7 @@ AUTO 6
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPDevPtr .EQ ZPBIN+2
ZPDevInfoPtr .EQ ZPBIN+4
ZPDevStatPtr .EQ ZPBIN+4
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -55,13 +55,17 @@ L.MSG2.IP .DA MSG2.IP
L.MSG2.GW .DA MSG2.GW
L.MSG2.DNS .DA MSG2.DNS
L.MSG2.HOSTNAME .DA MSG2.HOSTNAME
L.DevName .DA DevName
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA
bcs .9
sta hLIBTCPIP
>LDYA L.MSG0
clc
.9 rts
*--------------------------------------
CS.RUN >LDYA L.MSG0
>SYSCALL CPrintFYA
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
@ -69,44 +73,58 @@ CS.INIT >LDYA L.LIBTCPIP
ldy #S.IPCFG.HDEV
lda (ZPIPCfgPtr),y
bne CS.INIT.DUMPDEV
bne CS.RUN.DUMPDEV
>LDYA L.MSG0.NL
>SYSCALL CPrintFYA
jmp CS.INIT.DONE
jmp CS.RUN.DONE
CS.INIT.DUMPDEV sta DevID
CS.RUN.DUMPDEV sta DevID
>SYSCALL GetDevByIDA
>STYA ZPDevPtr
lda DevID
>SYSCALL GetDevInfoA
>STYA ZPDevInfoPtr
ldy #S.DEV.JMP
lda (ZPDevPtr),y
sta NetDevJmp+1
iny
lda (ZPDevPtr),y
sta NetDevJmp+2
ldx #DEVMGR.STATUS
jsr NetDevJmp
>STYA ZPDevStatPtr
>LDYA L.MSG0.L
>SYSCALL CPrintFYA
ldy #S.DEVSTAT.NET.MAC+6
.1 dey
>PUSHB (ZPDevInfoPtr),y
cpy #S.DEVSTAT.NET.MAC
ldy #S.DEVSTAT.NET.MAC+5
.1 >PUSHB (ZPDevStatPtr),y
dey
cpy #S.DEVSTAT.NET.MAC-1
bne .1
lda ZPDevPtr
clc
adc #S.DEV.NAME
tay
lda ZPDevPtr+1
adc #0
>PUSHYA
ldy #S.DEV.F
lda (ZPDevPtr),y
and #S.DEV.F.LEN
sta DevName
tax
.10 iny
lda (ZPDevPtr),y
sta DevName-S.DEV.NAME,y
dex
bne .10
>PUSHW L.DevName
>PUSHB DevID
>LDYA L.MSG1.DEV
>SYSCALL CPrintFYA
ldy #S.DEVSTAT.FLAGS
lda (ZPDevInfoPtr),y
ldy #S.DEVSTAT.NET.FLAGS
lda (ZPDevStatPtr),y
and #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD
beq .2
lda #1
@ -114,8 +132,8 @@ CS.INIT.DUMPDEV sta DevID
>LDYA L.MSG1.DEV.ARP
>SYSCALL CPrintFYA
ldy #S.DEVSTAT.FLAGS
lda (ZPDevInfoPtr),y
ldy #S.DEVSTAT.NET.FLAGS
lda (ZPDevStatPtr),y
and #S.DEVSTAT.NET.FLAGS.IPOFFLOAD
beq .3
lda #1
@ -124,15 +142,15 @@ CS.INIT.DUMPDEV sta DevID
>SYSCALL CPrintFYA
ldy #S.DEVSTAT.NET.STATUS
lda (ZPDevInfoPtr),y
lda (ZPDevStatPtr),y
and #S.DEVSTAT.NET.STATUS.OK
bne CS.INIT.LINK
bne CS.RUN.LINK
>PUSHW L.MSG1.LINK.KO
>LDYA L.MSG1.LINK
>SYSCALL CPrintFYA
bra CS.INIT.DUMPIP
bra CS.RUN.DUMPIP
CS.INIT.LINK >PUSHW L.MSG1.LINK.OK
CS.RUN.LINK >PUSHW L.MSG1.LINK.OK
>LDYA L.MSG1.LINK
>SYSCALL CPrintFYA
@ -140,7 +158,7 @@ CS.INIT.LINK >PUSHW L.MSG1.LINK.OK
>SYSCALL CPrintFYA
ldy #S.DEVSTAT.NET.STATUS
lda (ZPDevInfoPtr),y
lda (ZPDevStatPtr),y
and #$0F
tax
@ -152,7 +170,7 @@ CS.INIT.LINK >PUSHW L.MSG1.LINK.OK
bne .4
ldy #S.DEVSTAT.NET.STATUS
lda (ZPDevInfoPtr),y
lda (ZPDevStatPtr),y
and #S.DEVSTAT.NET.STATUS.FD
bne .5
>LDYA L.MSG1.DPLX.HD
@ -160,7 +178,7 @@ CS.INIT.LINK >PUSHW L.MSG1.LINK.OK
.5 >LDYA L.MSG1.DPLX.FD
.6 >SYSCALL CPrintFYA
CS.INIT.DUMPIP >LDYA L.MSG2
CS.RUN.DUMPIP >LDYA L.MSG2
>SYSCALL CPrintFYA
lda (ZPIPCfgPtr)
and #S.IPCFG.STATUS.OK
@ -226,19 +244,22 @@ CS.INIT.DUMPIP >LDYA L.MSG2
>LDYA L.MSG2.HOSTNAME
>SYSCALL CPrintFYA
CS.INIT.DONE lda #0 tell TSKMGR that all done ok, but
CS.RUN.DONE lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.DOEVENT clc
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
beq .8
>SYSCALL FreeMemA
clc
.8 clc
rts
*--------------------------------------
NetDevJmp jmp *
*--------------------------------------
CS.END
LIBTCPIP >PSTR "libtcpip.o"
*--------------------------------------
@ -266,6 +287,7 @@ MSG2.DNS >CSTR " DNS : %d.%d.%d.%d,%d.%d.%d.%d\n"
MSG2.HOSTNAME >CSTR " Hostname : %S.%S\n"
hLIBTCPIP .BS 1
DevID .BS 1
DevName .BS 5
MAN
SAVE BIN/IPCONFIG.S
ASM

View File

@ -56,13 +56,28 @@ CS.INIT ldy #MEM.COUNT Skip SLOT0
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.9 rts
rts
*--------------------------------------
CS.RUN ldy #bCANCEL
lda (pData),y
bne .9
CS.RUN >SYSCALL GetC
bcs .13
cmp #3 Ctrl-C ?
beq .9
cmp #19 Ctrl-S ?
bne .12
ldy #bSTOP
lda (pData),y
eor #$ff
sta (pData),y
bra .13
.12 ldy #bSTOP
lda #0
sta (pData),y
.13 ldy #bSTOP
lda (pData),y
bne .8
@ -186,12 +201,15 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
>LDYA L.MSG1
>SYSCALL CPrintFYA
lda (ZPPTR1) Free ? assume raw data...
bpl .10
ldy #S.MEM.BIN
lda (ZPPTR1),y
bne .7
****** DATA
ldy #S.MEM.PTR
.10 ldy #S.MEM.PTR
lda (ZPPTR1),y
sta ZPPTR2
iny
@ -246,47 +264,7 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
.9 rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hStdIn
cmp (pPs),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
ldy #bCANCEL
sta (pData),y
bra .8
.1 cmp #$13 Ctrl-S
bne .2
ldy #bSTOP
lda (pData),y
eor #$FF
sta (pData),y
bra .8
.2 ldy #bSTOP
lda #0
sta (pData),y
.8 clc
rts
.9 sec
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT clc
@ -311,7 +289,6 @@ LINE.COUNT .BS 1
MEM.COUNT .BS 1
USED.COUNT .BS 1
bSTOP .BS 1
bCANCEL .BS 1
DS.END
.ED
*--------------------------------------

View File

@ -56,9 +56,13 @@ L.MSG1.S .DA MSG1.S.0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA
sta hLIBTCPIP
bcs .9
>LDYA L.MSG0
sta hLIBTCPIP
clc
.9 rts
*--------------------------------------
CS.RUN >LDYA L.MSG0
>SYSCALL CPrintFYA
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETTABLE
@ -107,17 +111,18 @@ CS.INIT >LDYA L.LIBTCPIP
dec SocketCount
bne .1
CS.INIT.DONE lda #0 tell TSKMGR that all done ok, but
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.DOEVENT clc
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
beq .8
>SYSCALL FreeMemA
clc
.8 clc
rts
*--------------------------------------
CS.END

View File

@ -260,7 +260,7 @@ READBLOCK.RxOK and /PP.RxEvent.Brdcast
bne .1
.8 lda #$ff hMem
ldy #$ff Flags
ldy #$00 Flags
clc
rts
*--------------------------------------
@ -386,7 +386,7 @@ DEVSTAT .DA #S.DEV.S.BLOCK+S.DEV.S.WRITE+S.DEV.S.READ
.BS 1 Subtype
.BS 2 Version
*--------------------------------------
FLAGS .DA 0
FLAGS .DA #0
LINK.STATUS .BS 1 OK/DUPLEX/SPEED
MAC .BS 6
MAN

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.SRC
NEW
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
@ -75,7 +75,7 @@ TCP.IN ldy #S.IP.SRC+3
cpy #S.SOCKET.DST.PORT+2
bne .6
jmp TCP.IN.ESTABLISHED
jmp TCP.IN.REGULAR
.7 lda ZPPtrSKT
clc
@ -101,6 +101,7 @@ TCP.IN.LISTEN.NEW
ldx #3
sec
.1 lda (ZPFrameBase1),y
adc #0
sta TmpSocket+S.SOCKET.SQ.ACKNUM,x
@ -143,14 +144,21 @@ TCP.IN.LISTEN.NEW
jmp TCP.SendSYNACK
*--------------------------------------
TCP.IN.ESTABLISHED
stx hSocket
TCP.IN.REGULAR stx hSocket
ldy #S.SOCKET.STATUS
lda (ZPPtrSKT),y
cmp #S.SOCKET.STATUS.SYNRCVD Waiting for ACK to establish?
bne .1
ldy #S.TCP.OPTIONS yes, only accept ACK packet
asl
tax
jmp (L.TCP.IN.JMP,x)
*--------------------------------------
TCP.IN.JMP.CLOSED
TCP.IN.JMP.LISTEN
TCP.IN.JMP.SYNSENT
clc
rts
*--------------------------------------
TCP.IN.JMP.SYNRCVD
ldy #S.TCP.OPTIONS only accept ACK packet
lda (ZPFrameBase1),y
cmp #S.TCP.OPTIONS.ACK
bne .8
@ -206,18 +214,100 @@ TCP.IN.ESTABLISHED
.8 clc
rts
*--------------------------------------
TCP.IN.JMP.ESTBLSH
ldy #S.TCP.OPTIONS
lda (ZPFrameBase1),y
cmp #S.TCP.OPTIONS.ACK
bne .3
.1 cmp #S.SOCKET.STATUS.ESTBLSH
bne .99
bra *
.99 clc
jsr TCP.UpdateAck
.3 lda ZPFrameBase1
clc
adc #S.TCP
sta ZPDataPtr
lda ZPFrameBase1+1
adc /S.TCP
sta ZPDataPtr+1
ldy #S.TCP.DATAOFFSET
lda (ZPFrameBase1),y
lsr
lsr
clc
adc ZPDataPtr
sta ZPDataPtr
lda ZPDataPtr+1
adc ZPDataPtr+1
sta ZPDataPtr+1
lda ZPDataPtr
sec
sbc ZPFrameBase1
sta ZPDataLen
lda ZPDataPtr+1
sbc ZPFrameBase1+1
sta ZPDataLen+1
ldy #S.SOCKET.SQ.ACKNUM+3
lda (ZPPtrSKT),y
clc
adc ZPDataLen
sta (ZPPtrSKT),y
dey
lda (ZPPtrSKT),y
adc ZPDataLen+1
sta (ZPPtrSKT),y
dey
lda (ZPPtrSKT),y
adc #0
sta (ZPPtrSKT),y
dey
lda (ZPPtrSKT),y
adc #0
sta (ZPPtrSKT),y
jsr TCP.SendACK
clc
rts
*--------------------------------------
TCP.SendSYNACK ldy #S.SOCKET.SRC.ADDR+3
TCP.IN.JMP.CLWAIT
TCP.IN.JMP.LASTACK
TCP.IN.JMP.FINWT1
TCP.IN.JMP.FINWT2
TCP.IN.JMP.CLOSING
TCP.IN.JMP.TIMEWT
clc
rts
*--------------------------------------
TCP.UpdateAck ldy #S.TCP.ACK.NUMBER
ldx #4
.1 lda (ZPFrameBase1),y
pha
iny
dex
bne .1
ldy #S.SOCKET.SQ.ACKNUM+3
ldx #4
.2 pla
sta (ZPPtrSKT),y
dey
dex
bne .2
rts
*--------------------------------------
TCP.SendACK lda #S.TCP.OPTIONS.ACK
bra TCP.SendMSG
TCP.SendSYNACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
TCP.SendMSG sta TCP.MSG+S.TCP.OPTIONS
ldy #S.SOCKET.SRC.ADDR+3
ldx #3
.1 lda (ZPPtrSKT),y
sta TCP.MSG+S.IP.SRC,x
@ -255,9 +345,6 @@ TCP.SendSYNACK ldy #S.SOCKET.SRC.ADDR+3
dex
bpl .3
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
sta TCP.MSG+S.TCP.OPTIONS
>PUSHW L.TCP.MSG
jsr SEND.TCP.FRAME

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.SRC
NEW
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
@ -97,6 +97,17 @@ L.DNS.CACHE .DA DNS.CACHE
L.SKT.TABLE .DA SKT.TABLE
L.TmpSocket .DA TmpSocket
L.TCP.MSG .DA TCP.MSG
L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.LISTEN
.DA TCP.IN.JMP.SYNSENT
.DA TCP.IN.JMP.SYNRCVD
.DA TCP.IN.JMP.ESTBLSH
.DA TCP.IN.JMP.CLWAIT
.DA TCP.IN.JMP.LASTACK
.DA TCP.IN.JMP.FINWT1
.DA TCP.IN.JMP.FINWT2
.DA TCP.IN.JMP.CLOSING
.DA TCP.IN.JMP.TIMEWT
.DA 0
*--------------------------------------
LIB.LOAD lda bFirstLoad

View File

@ -151,15 +151,15 @@ note : '$VAR' does NOT expand Variable
| ARP | Working | dump ARP cache, setup a static ARP entry | 0.8 |
| PING | Working | | 0.8 |
| DNSINFO | Working | dump DNS cache, setup a static DNS entry | | 0.8 |
| IPCONFIG | Working | renamed from NETINFO | 0.8 |
| NETSTAT | Working | | 0.8 |
| IPCONFIG | Working | renamed from NETINFO | 0.9 |
| NETSTAT | Working | | 0.9 |
## BIN,External DEV Shell commands:
| Name | Status | Comment | K.Ver |
| ---- | ------ | ------- | ----- |
| ASM | In Progress | S-C MASM based multi CPU assembler | |
| DEVDUMP | | | 0.8 |
| MEMDUMP | Working | | 0.8 |
| MEMDUMP | Working | | 0.9 |
| RPCDUMP | Working | tool based on UDP socket API, renamed from RPCINFO | 0.8 |
## Misc

View File

@ -414,9 +414,6 @@ Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
ldy #bCTRLC
lda (pData),y
bmi .9
clc
.9 rts
*--------------------------------------
@ -480,7 +477,6 @@ DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
DS.START
TimeOut .BS 1
bCTRLC .BS 1
hSocket .BS 1
hFrame .BS 1
DS.END

View File

@ -70,6 +70,11 @@ CS.RUN jsr Init.Timeout
>SYSCALL Sleep
jsr Wait.Timeout
bcc .1
>SYSCALL GetC
bcs .1
cmp #$03
bne .1
jmp CS.RUN.ABORT
.99 >LDYA L.MSG.TCPIPERR
>SYSCALL CPrintFYA
@ -96,12 +101,12 @@ CS.RUN.INIT ldx #3
>SYSCALL CPrintFYA
.11 >SYSCALL Sleep
ldy #bCTRLC
lda (pData),y
bmi .99
bra .11
>SYSCALL GetC
bcs .12
cmp #03
beq CS.RUN.ABORT
ldy #hSocket
.12 ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ACCEPTA
@ -127,46 +132,13 @@ CS.RUN.INIT ldx #3
sec
rts
.99 >LDYA L.MSG.ABORT
CS.RUN.ABORT >LDYA L.MSG.ABORT
>SYSCALL CPrintFYA
lda #0
sec
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .1 is it a TIMER event?
asl One second ?
bpl .9
ldy #TimeOut
lda (pData),y
beq .9
dec
sta (pData),y
sec do not discard TIMER event
rts
.1 bit #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .9
lda #$FF
ldy #bCTRLC
sta (pData),y
clc
rts
.9 sec
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT ldy #hSocket

View File

@ -151,8 +151,13 @@ CS.INIT.DEV >LDYA L.DEVNAME
CS.RUN ldx #DEVMGR.READBLOCK
jsr NetDevJmp
bcs .8
sta .1+1
>LIBCALL hLIBTCPIP,LIBTCPIP.RCVD.FRAMEA
bcc .8
.1 lda #$ff
>SYSCALL FreeMemA
.8 clc
rts

View File

@ -40,7 +40,7 @@ CS.INIT >LDYA L.LIBTCPIP
sta hLIBTCPIP
>PUSHWI S.IP.PROTOCOL.TCP
>PUSHWI TCP.PORT.TELNETS
>PUSHWI TCP.PORT.TELNET
>LIBCALL hLIBTCPIP,LIBTCPIP.NewSrvSocket
bcs .99
sta hSrvSocket
@ -52,8 +52,6 @@ CS.RUN >PUSHB hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SrvSocketAccept
bcs .8
>LIBCALL hLIBTCPIP,LIBTCPIP.CreateDevice
bcs *