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.Dst.Addr .BS 4
Socket.Dst.Port .DA 0 Identifier
.BS 16
.BS S.SOCKET-16
*--------------------------------------
ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ
.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.END .EQ 65535
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.GET.IPCFG .EQ 6
@ -180,10 +181,14 @@ S.SOCKET.SQ.INHEAD .EQ 16
S.SOCKET.SQ.INTAIL .EQ 18
S.SOCKET.SQ.OUTHEAD .EQ 20
S.SOCKET.SQ.OUTTAIL .EQ 22
S.SOCKET.SQ.SEQNUM .EQ 24
S.SOCKET.SQ.ACKNUM .EQ 28
S.SOCKET.SQ.INFREE .EQ 24
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.DSTMAC .EQ 2
@ -259,43 +264,6 @@ S.TCP.URGPTR .EQ S.IP+18
*
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.F .EQ S.UDP+2
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
*--------------------------------------
*$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
*JSPARE .EQ $BF03
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
*--------------------------------------
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
>SYSCALL GetMemPtrA
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
ldy #S.SOCKET.SQ.OUTHEAD
ldy #S.SOCKET.SQ.OUTFREE
lda (ZPPtrSKT),y
* clc
adc ZPDataInLen
sec
sbc ZPDataInLen
tax
iny
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
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
.9 rts
.91 lda #MLI.ERR.VOLFULL
sec
rts
*--------------------------------------
SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
lda (ZPPtrSKT),y
@ -208,7 +308,13 @@ SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
.9 sec
rts
*--------------------------------------
*/--------------------------------------
* #SKT.RcvdA (DGRAM,RAW)
* ##In :
* A = hSocket
* ##Out :
* A = hFrame
*\--------------------------------------
SKT.RCVDA jsr SKT.GetA.I
bcs .9
@ -238,6 +344,14 @@ SKT.RCVDA jsr SKT.GetA.I
.99 sec
.9 rts
*/--------------------------------------
* #SKT.Read (STREAM)
* ##In :
* A = hSocket
* ##Out :
* A = hFrame
*\--------------------------------------
SKT.Read
*--------------------------------------
SKT.CLOSEA cmp #K.SKTTABLE.SIZE
bcs SKT.GetA.9

View File

@ -194,6 +194,20 @@ TCP.IN.JMP.SYNRCVD
lda #S.SOCKET.STATUS.ESTBLSH
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
>PUSHBI 0
>SYSCALL GetMem

View File

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

View File

@ -448,7 +448,7 @@ Socket .DA #S.SOCKET.SOCK.DGRAM
.DA UDP.PORT.DHCPC Socket.Src.Port
.HS FF.FF.FF.FF Socket.Dst.Addr
.DA UDP.PORT.DHCPS Socket.Dst.Port
.BS 16
.BS S.SOCKET-16
*--------------------------------------
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .BS 4