Kernel version 0.9 : TCPIP, larger S.SOCKET struct to handle more cached values, INC files splitted in smaller files

This commit is contained in:
Rémy GIBERT 2017-02-09 17:24:19 +01:00
parent 0631f052aa
commit 66600f0c4d
13 changed files with 254 additions and 157 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -339,7 +339,7 @@ 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 16 .BS S.SOCKET-16
*-------------------------------------- *--------------------------------------
ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ
.DA #0 CODE .DA #0 CODE

47
INC/DHCP.I.txt Normal file
View File

@ -0,0 +1,47 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
S.DHCP.OP .EQ S.UDP+0 1 = BOOTREQUEST, 2 = BOOTREPLY
S.DHCP.OP.BOOTREQUEST .EQ 1
S.DHCP.OP.BOOTREPLY .EQ 2
S.DHCP.HTYPE .EQ S.UDP+1 1 = ETHERNET
S.DHCP.HTYPE.ETHERNET .EQ 1
S.DHCP.HLEN .EQ S.UDP+2 6 (MAC len)
S.DHCP.HLEN.ETHERNET .EQ 6
S.DHCP.HOPS .EQ S.UDP+3 0
S.DHCP.XID .EQ S.UDP+4 client : random number
S.DHCP.SECS .EQ S.UDP+8
S.DHCP.FLAGS .EQ S.UDP+10
S.DHCP.FLAGS.BRDCST .EQ %10000000
S.DHCP.CIADDR .EQ S.UDP+12
S.DHCP.YIADDR .EQ S.UDP+16
S.DHCP.SIADDR .EQ S.UDP+20
S.DHCP.GIADDR .EQ S.UDP+24
S.DHCP.CHADDR .EQ S.UDP+28
S.DHCP.SNAME .EQ S.UDP+44
S.DHCP.FILE .EQ S.UDP+108
S.DHCP.COOKIE .EQ S.UDP+236
S.DHCP.OPTIONS .EQ S.UDP+240
S.DHCP.OPTIONS.DHCPDiscover .EQ 1
S.DHCP.OPTIONS.DHCPOffer .EQ 2
S.DHCP.OPTIONS.DHCPRequest .EQ 3
S.DHCP.OPTIONS.DHCPDecline .EQ 4
S.DHCP.OPTIONS.DHCPAck .EQ 5
S.DHCP.OPTIONS.DHCPNak .EQ 6
S.DHCP.OPTIONS.DHCPRelease .EQ 7
S.DHCP.OPTIONS.DHCPInform .EQ 8
S.DHCP.OPTIONS.MASK .EQ 1
S.DHCP.OPTIONS.GW .EQ 3
S.DHCP.OPTIONS.DNS .EQ 6
S.DHCP.OPTIONS.DOMAIN .EQ 15
S.DHCP.OPTIONS.END .EQ 255
*
S.DHCP .EQ S.UDP+240
*--------------------------------------
MAN
SAVE /A2OSX.DEV/INC/DHCP.I

View File

@ -20,7 +20,8 @@ K.DNS.MAXLEN .EQ 64
K.DYNPORT.START .EQ 49152 K.DYNPORT.START .EQ 49152
K.DYNPORT.END .EQ 65535 K.DYNPORT.END .EQ 65535
K.TCP.MSS .EQ K.ETH.FRAME.LEN-20-20-14 K.TCP.MSS .EQ K.ETH.FRAME.LEN-20-20-14
K.TCP.WSIZE .EQ K.TCP.MSS K.TCP.WSIZE .EQ 2048
K.TCP.WMASK .EQ 2047
*-------------------------------------- *--------------------------------------
LIBTCPIP.SET.IPCFG .EQ 4 LIBTCPIP.SET.IPCFG .EQ 4
LIBTCPIP.GET.IPCFG .EQ 6 LIBTCPIP.GET.IPCFG .EQ 6
@ -180,10 +181,14 @@ S.SOCKET.SQ.INHEAD .EQ 16
S.SOCKET.SQ.INTAIL .EQ 18 S.SOCKET.SQ.INTAIL .EQ 18
S.SOCKET.SQ.OUTHEAD .EQ 20 S.SOCKET.SQ.OUTHEAD .EQ 20
S.SOCKET.SQ.OUTTAIL .EQ 22 S.SOCKET.SQ.OUTTAIL .EQ 22
S.SOCKET.SQ.SEQNUM .EQ 24 S.SOCKET.SQ.INFREE .EQ 24
S.SOCKET.SQ.ACKNUM .EQ 28 S.SOCKET.SQ.OUTFREE .EQ 26
* *
S.SOCKET .EQ 32 *
S.SOCKET.SQ.SEQNUM .EQ 32
S.SOCKET.SQ.ACKNUM .EQ 36
*
S.SOCKET .EQ 40
*-------------------------------------- *--------------------------------------
S.ETH.FRAMELEN .EQ 0 S.ETH.FRAMELEN .EQ 0
S.ETH.DSTMAC .EQ 2 S.ETH.DSTMAC .EQ 2
@ -259,43 +264,6 @@ S.TCP.URGPTR .EQ S.IP+18
* *
S.TCP .EQ S.IP+20 S.TCP .EQ S.IP+20
*-------------------------------------- *--------------------------------------
S.DHCP.OP .EQ S.UDP+0 1 = BOOTREQUEST, 2 = BOOTREPLY
S.DHCP.OP.BOOTREQUEST .EQ 1
S.DHCP.OP.BOOTREPLY .EQ 2
S.DHCP.HTYPE .EQ S.UDP+1 1 = ETHERNET
S.DHCP.HTYPE.ETHERNET .EQ 1
S.DHCP.HLEN .EQ S.UDP+2 6 (MAC len)
S.DHCP.HLEN.ETHERNET .EQ 6
S.DHCP.HOPS .EQ S.UDP+3 0
S.DHCP.XID .EQ S.UDP+4 client : random number
S.DHCP.SECS .EQ S.UDP+8
S.DHCP.FLAGS .EQ S.UDP+10
S.DHCP.FLAGS.BRDCST .EQ %10000000
S.DHCP.CIADDR .EQ S.UDP+12
S.DHCP.YIADDR .EQ S.UDP+16
S.DHCP.SIADDR .EQ S.UDP+20
S.DHCP.GIADDR .EQ S.UDP+24
S.DHCP.CHADDR .EQ S.UDP+28
S.DHCP.SNAME .EQ S.UDP+44
S.DHCP.FILE .EQ S.UDP+108
S.DHCP.COOKIE .EQ S.UDP+236
S.DHCP.OPTIONS .EQ S.UDP+240
S.DHCP.OPTIONS.DHCPDiscover .EQ 1
S.DHCP.OPTIONS.DHCPOffer .EQ 2
S.DHCP.OPTIONS.DHCPRequest .EQ 3
S.DHCP.OPTIONS.DHCPDecline .EQ 4
S.DHCP.OPTIONS.DHCPAck .EQ 5
S.DHCP.OPTIONS.DHCPNak .EQ 6
S.DHCP.OPTIONS.DHCPRelease .EQ 7
S.DHCP.OPTIONS.DHCPInform .EQ 8
S.DHCP.OPTIONS.MASK .EQ 1
S.DHCP.OPTIONS.GW .EQ 3
S.DHCP.OPTIONS.DNS .EQ 6
S.DHCP.OPTIONS.DOMAIN .EQ 15
S.DHCP.OPTIONS.END .EQ 255
*
S.DHCP .EQ S.UDP+240
*--------------------------------------
S.DNS.ID .EQ S.UDP+0 S.DNS.ID .EQ S.UDP+0
S.DNS.F .EQ S.UDP+2 S.DNS.F .EQ S.UDP+2
S.DNS.F.QR .EQ %10000000.00000000 S.DNS.F.QR .EQ %10000000.00000000

58
INC/MLI.ERR.I.txt Normal file
View File

@ -0,0 +1,58 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
*$00 - No Error
*$01 - Bad Call Number
*$04 - Bad Parameter Count
*$25 - Interrupt Table Full
*$27 - I/O Error
*$28 - No Device Connected
*$2B - Write Protected
*$2E - Disk Switched
*$2F - Device Offline
*$40 - Invalid Pathname
*$42 - Maximum Number of Files Open
*$43 - Invalid Reference Number
*$44 - Directory Not Found
*$45 - Volume Not Found
*$46 - File Not Found
*$47 - Duplicate File Name
*$48 - Volume Full
*$49 - Directory Full
*$4A - Incompatible File Format
*$4B - Unsupported Storage Type
*$4C - End of File, No More Data
*$4D - Beyond EOF
*$4E - File Access Error, File Locked
*$50 - File Already Open
*$51 - Directory Structure Damaged
*$53 - Invalid Parameter
*$55 - Too Many Volumes
*$56 - Bad Buffer Address
*$57 - Duplicate Volume
*$5A - File Structure Damaged
*--------------------------------------
MLI.ERR.BADCALL .EQ $01
*MLI.ERR.BADCNT .EQ $04
*MLI.ERR.IRQFULL .EQ $25
MLI.ERR.IO .EQ $27
MLI.ERR.NODEV .EQ $28
MLI.ERR.WRTPROT .EQ $2B
MLI.ERR.DSKSWIT .EQ $2E
MLI.ERR.INVPATH .EQ $40
MLI.ERR.FCBFULL .EQ $42
MLI.ERR.BADREF .EQ $43
MLI.ERR.PNOTFND .EQ $44
MLI.ERR.VNOTFND .EQ $45
MLI.ERR.FNOTFND .EQ $46
MLI.ERR.DUPFILE .EQ $47
MLI.ERR.OVERRUN .EQ $48
MLI.ERR.VOLFULL .EQ $49
MLI.ERR.EOF .EQ $4C
*--------------------------------------
MAN
SAVE /A2OSX.DEV/INC/MLI.ERR.I

View File

@ -63,55 +63,6 @@ S.FILEINFO.CREATETIME .EQ $10
* *
S.FILEINFO .EQ $12 S.FILEINFO .EQ $12
*-------------------------------------- *--------------------------------------
*$00 - No Error
*$01 - Bad Call Number
*$04 - Bad Parameter Count
*$25 - Interrupt Table Full
*$27 - I/O Error
*$28 - No Device Connected
*$2B - Write Protected
*$2E - Disk Switched
*$2F - Device Offline
*$40 - Invalid Pathname
*$42 - Maximum Number of Files Open
*$43 - Invalid Reference Number
*$44 - Directory Not Found
*$45 - Volume Not Found
*$46 - File Not Found
*$47 - Duplicate File Name
*$48 - Volume Full
*$49 - Directory Full
*$4A - Incompatible File Format
*$4B - Unsupported Storage Type
*$4C - End of File, No More Data
*$4D - Beyond EOF
*$4E - File Access Error, File Locked
*$50 - File Already Open
*$51 - Directory Structure Damaged
*$53 - Invalid Parameter
*$55 - Too Many Volumes
*$56 - Bad Buffer Address
*$57 - Duplicate Volume
*$5A - File Structure Damaged
*--------------------------------------
MLI.ERR.BADCALL .EQ $01
*MLI.ERR.BADCNT .EQ $04
*MLI.ERR.IRQFULL .EQ $25
MLI.ERR.IO .EQ $27
MLI.ERR.NODEV .EQ $28
MLI.ERR.WRTPROT .EQ $2B
MLI.ERR.DSKSWIT .EQ $2E
MLI.ERR.INVPATH .EQ $40
MLI.ERR.FCBFULL .EQ $42
MLI.ERR.BADREF .EQ $43
MLI.ERR.PNOTFND .EQ $44
MLI.ERR.VNOTFND .EQ $45
MLI.ERR.FNOTFND .EQ $46
MLI.ERR.DUPFILE .EQ $47
MLI.ERR.OVERRUN .EQ $48
MLI.ERR.VOLFULL .EQ $49
MLI.ERR.EOF .EQ $4C
*--------------------------------------
MLI .EQ $BF00 MLI .EQ $BF00
*JSPARE .EQ $BF03 *JSPARE .EQ $BF03
DATETIME .EQ $BF06 DATETIME .EQ $BF06

View File

@ -1,56 +0,0 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
*--------------------------------------
S.NODE.SOCK.SO .EQ 2
S.NODE.SOCK.SO.DEBUG .EQ $01
S.NODE.SOCK.SO.ACCEPTCONN .EQ $02
S.NODE.SOCK.SO.REUSEADDR .EQ $04
S.NODE.SOCK.SO.KEEPALIVE .EQ $08
S.NODE.SOCK.SO.DONTROUTE .EQ $10
S.NODE.SOCK.SO.BROADCAST .EQ $20
S.NODE.SOCK.SO.USELOOPBACK .EQ $40
S.NODE.SOCK.SO.LINGER .EQ $80
S.NODE.SOCK.S .EQ 3
S.NODE.SOCK.S.CLOSED .EQ 0
S.NODE.SOCK.S.LISTEN .EQ 1
S.NODE.SOCK.S.SYNSENT .EQ 2
S.NODE.SOCK.S.SYNRCVD .EQ 3
S.NODE.SOCK.S.ESTBLSH .EQ 4
S.NODE.SOCK.S.CLWAIT .EQ 5
S.NODE.SOCK.S.LASTACK .EQ 6
S.NODE.SOCK.S.FINWT1 .EQ 7
S.NODE.SOCK.S.FINWT2 .EQ 8
S.NODE.SOCK.S.CLOSING .EQ 9
S.NODE.SOCK.S.TIMEWT .EQ 10
S.NODE.SOCK.SRC.ADDR .EQ 4
S.NODE.SOCK.SRC.PORT .EQ 8
S.NODE.SOCK.DST.ADDR .EQ 10
S.NODE.SOCK.DST.PORT .EQ 14
* Listen type Queue
S.NODE.SOCK.LQ.HEAD .EQ 16
S.NODE.SOCK.LQ.TAIL .EQ 17
S.NODE.SOCK.LQ .EQ 18
S.NODE.SOCK.LQ.MAX .EQ 14 14 hSocket
* Datagram type Queue
S.NODE.SOCK.DQ.HEAD .EQ 16
S.NODE.SOCK.DQ.TAIL .EQ 17
S.NODE.SOCK.DQ .EQ 18
S.NODE.SOCK.DQ.MAX .EQ 14 14 hMem (frames)
* Stream type Queue
S.NODE.SOCK.SQ.hInMem .EQ 16
S.NODE.SOCK.SQ.hOutMem .EQ 17
S.NODE.SOCK.SQ.SIZE .EQ 18
S.NODE.SOCK.SQ.HEAD .EQ 20
S.NODE.SOCK.SQ.TAIL .EQ 22
S.NODE.SOCK.SQ.SEQNUM .EQ 24
S.NODE.SOCK.SQ.ACKNUM .EQ 28
*
S.NODE.SOCK .EQ 32
*--------------------------------------
MAN
SAVE /A2OSX.DEV/INC/SOCKET.I

View File

@ -163,25 +163,125 @@ SKT.SEND.UDP lda #S.IP.PROTOCOL.UDP
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SKT.SEND.TCP ldy #S.SOCKET.STREAM.hOutMem SKT.SEND.TCP ldy #S.SOCKET.STATUS
lda (ZPPtrSKT),y
and #S.SOCKET.STATUS.MASK
cmp #S.SOCKET.STATUS.ESTBLSH
beq .10
lda #MLI.ERR.IO
* sec CS from cmp
rts
.10 ldy #S.SOCKET.STREAM.hOutMem
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
>SYSCALL GetMemPtrA >SYSCALL GetMemPtrA
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
ldy #S.SOCKET.SQ.OUTHEAD ldy #S.SOCKET.SQ.OUTFREE
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
* clc sec
adc ZPDataInLen sbc ZPDataInLen
tax tax
iny iny
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
sbc ZPDataInLen+1 X,A = new OUTFREE
bcc .91
sta (ZPPtrSKT),y
dey
txa
sta (ZPPtrSKT),y Update Socket OUTFREE
ldy #S.SOCKET.SQ.OUTHEAD
lda (ZPPtrSKT),y
tax
clc
adc ZPDataInLen
sta (ZPPtrSKT),y
iny
lda (ZPPtrSKT),y
pha
adc ZPDataInLen+1 adc ZPDataInLen+1
and /K.TCP.WMASK
sta (ZPPtrSKT),y Update Socket new OUTHEAD
txa X,PHA=OUTHEAD
clc
adc ZPTmpPtr1
sta ZPTmpPtr2
pla
pha
adc ZPTmpPtr1+1 Ptr1=Current Base
sta ZPTmpPtr1+2 Ptr2=Current Base+OUTHEAD
stx ZPTmpPtr3
pla
clc
adc /65536-K.TCP.WSIZE
sta ZPTmpPtr3+1 Ptr3=!(K.TCP.WSIZE-OUTHEAD)
lda ZPDataInLen
eor #$ff
sta ZPDataInLen
lda ZPDataInLen+1
eor #$ff
sta ZPDataInLen+1 ZPDataInLen=!ZPDataInLen
ldy #0
.1 inc ZPTmpPtr3 Reached the TOP of buf ?
bne .2
inc ZPTmpPtr3+1
beq .5
.2 inc ZPDataInLen
bne .3
inc ZPDataInLen+1
beq .80
.3 lda (ZPDataInPtr),y
sta (ZPTmpPtr2)
iny
bne .4
inc ZPDataInPtr+1
.4 inc ZPTmpPtr2
bne .1
inc ZPTmpPtr2+1
bra .1
.5 inc ZPDataInLen
bne .6
inc ZPDataInLen+1
beq .80
.6 lda (ZPDataInPtr),y
sta (ZPTmpPtr1)
iny
bne .7
inc ZPDataInPtr+1
.7 inc ZPTmpPtr1
bne .5
inc ZPTmpPtr1+1
bra .6
.80 clc
rts
clc .91 lda #MLI.ERR.VOLFULL
sec
.9 rts rts
*-------------------------------------- *--------------------------------------
SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
@ -208,7 +308,13 @@ SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
.9 sec .9 sec
rts rts
*-------------------------------------- */--------------------------------------
* #SKT.RcvdA (DGRAM,RAW)
* ##In :
* A = hSocket
* ##Out :
* A = hFrame
*\--------------------------------------
SKT.RCVDA jsr SKT.GetA.I SKT.RCVDA jsr SKT.GetA.I
bcs .9 bcs .9
@ -238,6 +344,14 @@ SKT.RCVDA jsr SKT.GetA.I
.99 sec .99 sec
.9 rts .9 rts
*/--------------------------------------
* #SKT.Read (STREAM)
* ##In :
* A = hSocket
* ##Out :
* A = hFrame
*\--------------------------------------
SKT.Read
*-------------------------------------- *--------------------------------------
SKT.CLOSEA cmp #K.SKTTABLE.SIZE SKT.CLOSEA cmp #K.SKTTABLE.SIZE
bcs SKT.GetA.9 bcs SKT.GetA.9

View File

@ -194,6 +194,20 @@ TCP.IN.JMP.SYNRCVD
lda #S.SOCKET.STATUS.ESTBLSH lda #S.SOCKET.STATUS.ESTBLSH
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
ldy #S.SOCKET.SQ.INFREE
lda #K.TCP.WSIZE
sta (ZPPtrSKT),y
iny
lda /K.TCP.WSIZE
sta (ZPPtrSKT),y
ldy #S.SOCKET.SQ.OUTFREE
lda #K.TCP.WSIZE
sta (ZPPtrSKT),y
iny
lda /K.TCP.WSIZE
sta (ZPPtrSKT),y
>PUSHW K.TCP.WSIZE >PUSHW K.TCP.WSIZE
>PUSHBI 0 >PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem

View File

@ -1,6 +1,6 @@
PR#3 PR#3
PREFIX /A2OSX.SRC PREFIX /A2OSX.SRC
LOMEM $A00 LOMEM $900
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
@ -10,6 +10,7 @@ AUTO 6
*-------------------------------------- *--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/MLI.ERR.I
.INB /A2OSX.DEV/INC/LIBTCPIP.I .INB /A2OSX.DEV/INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ZPFrameInPtr .EQ ZPLIB ZPFrameInPtr .EQ ZPLIB

View File

@ -448,7 +448,7 @@ 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 16 .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