mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-10 07:54:37 +00:00
334 lines
7.5 KiB
Plaintext
334 lines
7.5 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.SRC
|
||
LOMEM $900
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF /A2OSX.BOOT/LIB/LIBTCPIP.O
|
||
*--------------------------------------
|
||
.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
|
||
ZPFrameInLen .EQ ZPLIB+2
|
||
|
||
ZPDataInPtr .EQ ZPLIB+4
|
||
ZPDataInLen .EQ ZPLIB+6
|
||
|
||
ZPFrameOutPtr .EQ ZPLIB+8
|
||
ZPFrameOutLen .EQ ZPLIB+10
|
||
|
||
ZPDataOutPtr .EQ ZPLIB+12
|
||
ZPDataOutLen .EQ ZPLIB+14
|
||
|
||
ZPPtrIP .EQ ZPLIB+16
|
||
ZPPtrMAC .EQ ZPLIB+18
|
||
ZPPtrDNS .EQ ZPLIB+20
|
||
ZPPtrSKT .EQ ZPLIB+22
|
||
|
||
ZPCachePtr .EQ ZPLIB+24
|
||
ZPTmpPtr1 .EQ ZPLIB+26
|
||
ZPTmpPtr2 .EQ ZPLIB+28
|
||
ZPTmpPtr3 .EQ ZPLIB+30
|
||
*--------------------------------------
|
||
* File Header (16 Bytes)
|
||
*--------------------------------------
|
||
CS.START cld
|
||
jmp (.1,x)
|
||
.DA #$61 6502,Level 1 (65c02)
|
||
.DA #1 BIN Layout Version 1
|
||
.DA 0
|
||
.DA CS.END-CS.START
|
||
.DA 0
|
||
.DA 0
|
||
.DA 0
|
||
*--------------------------------------
|
||
* Relocation Table
|
||
*--------------------------------------
|
||
.1 .DA LIB.LOAD
|
||
.DA LIB.UNLOAD
|
||
|
||
.DA SET.IPCFG
|
||
.DA GET.IPCFG
|
||
|
||
.DA $ffff NEW.ICMP.FRAME
|
||
.DA $ffff NEW.TCP.FRAME
|
||
.DA $ffff NEW.UDP.FRAME
|
||
.DA $ffff NEW.IP.FRAME
|
||
.DA $ffff NEW.ARP.FRAME
|
||
.DA $ffff NEW.ETH.FRAME
|
||
|
||
.DA $ffff SEND.ICMP.FRAME
|
||
.DA $ffff SEND.TCP.FRAME
|
||
.DA $ffff SEND.UDP.FRAME
|
||
.DA $ffff SEND.IP.FRAME
|
||
.DA $ffff SEND.ARP.FRAME
|
||
.DA $ffff SEND.ETH.FRAME
|
||
|
||
.DA ARP.CLEAR
|
||
.DA ARP.QUERY
|
||
.DA ARP.ADD
|
||
.DA ARP.GETCACHE
|
||
|
||
.DA DNS.CLEAR
|
||
.DA DNS.QUERY
|
||
.DA DNS.ADD
|
||
.DA DNS.GETCACHE
|
||
|
||
.DA POLL
|
||
.DA PULSEA
|
||
|
||
.DA SKT.NEW
|
||
.DA $FFFF
|
||
.DA SKT.ACCEPTA
|
||
.DA $FFFF
|
||
.DA SKT.SEND
|
||
.DA SKT.RCVDA
|
||
.DA $FFFF
|
||
.DA SKT.CLOSEA
|
||
.DA SKT.GETTABLE
|
||
.DA SKT.GETA
|
||
|
||
.DA HST.GETBYNAME
|
||
.DA HST.GETBYADDR
|
||
*--------------------------------------
|
||
L.IPCFG .DA IPCFG
|
||
L.ARP.REQ .DA ARP.REQ
|
||
L.ARP.REP .DA ARP.REP
|
||
L.DNS.SOCKET .DA DNS.SOCKET
|
||
L.DNS.MSG .DA DNS.MSG
|
||
L.ARP.CACHE .DA ARP.CACHE
|
||
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
|
||
bne .8
|
||
jsr ARP.CLEAR
|
||
jsr DNS.CLEAR
|
||
|
||
>LDYAI K.DYNPORT.START
|
||
>STYA DYNPORT.LAST
|
||
|
||
inc bFirstLoad
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
LIB.UNLOAD clc
|
||
rts
|
||
*--------------------------------------
|
||
POLL ldx #DEVMGR.READBLOCK
|
||
jsr NetDevJmp
|
||
bcs .99 No Frame
|
||
|
||
stx hFrameIn
|
||
>STYA ZPFrameInPtr
|
||
|
||
lda (ZPFrameInPtr) Get Frame Len
|
||
sta ZPFrameInLen
|
||
ldy #1
|
||
lda (ZPFrameInPtr),y
|
||
sta ZPFrameInLen+1
|
||
|
||
ldy #S.ETH.ETHERTYPE
|
||
lda (ZPFrameInPtr),y
|
||
tax
|
||
iny
|
||
lda (ZPFrameInPtr),y
|
||
|
||
cmp #S.ETH.ETHERTYPE.ARP
|
||
bne .1
|
||
cpx /S.ETH.ETHERTYPE.ARP
|
||
bne .1
|
||
|
||
jmp ARP.IN
|
||
|
||
.1 cmp #S.ETH.ETHERTYPE.IP
|
||
bne .9
|
||
cpx /S.ETH.ETHERTYPE.IP
|
||
bne .9
|
||
|
||
jmp IP.IN
|
||
|
||
.9 lda hFrameIn
|
||
>SYSCALL FreeMemA
|
||
.99 rts
|
||
*--------------------------------------
|
||
* Expire = every sec
|
||
* Retry = every 100 msec
|
||
*--------------------------------------
|
||
PULSEA and #S.EVT.F.T1SEC
|
||
beq .1
|
||
jsr ARP.EXPIRE
|
||
jsr DNS.EXPIRE
|
||
|
||
.1 jsr DNS.POLL
|
||
jmp FRM.RETRY
|
||
*--------------------------------------
|
||
ToLowerCaseA cmp #'A'
|
||
bcc .1
|
||
cmp #'Z'+1
|
||
bcs .1
|
||
adc #$20
|
||
.1 rts
|
||
*--------------------------------------
|
||
GetDynPort inc DYNPORT.LAST
|
||
bne .1
|
||
inc DYNPORT.LAST+1
|
||
|
||
lda DYNPORT.LAST
|
||
cmp #K.DYNPORT.END
|
||
lda DYNPORT.LAST+1
|
||
sbc /K.DYNPORT.END
|
||
|
||
bcs .1
|
||
|
||
>LDAXI K.DYNPORT.START
|
||
>STAX DYNPORT.LAST
|
||
rts CC
|
||
|
||
.1 >LDAX DYNPORT.LAST
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
DecDataInLen lda ZPDataInLen
|
||
bne .1
|
||
lda ZPDataInLen+1
|
||
beq .9
|
||
dec ZPDataInLen+1
|
||
.1 dec ZPDataInLen
|
||
lda #$FF Make NZ
|
||
.9 rts
|
||
*--------------------------------------
|
||
NetDevJmp jmp *
|
||
*--------------------------------------
|
||
.INB LIB/LIBTCPIP.S.ARP
|
||
.INB LIB/LIBTCPIP.S.CFG
|
||
.INB LIB/LIBTCPIP.S.DNS
|
||
.INB LIB/LIBTCPIP.S.FRM
|
||
.INB LIB/LIBTCPIP.S.HST
|
||
.INB LIB/LIBTCPIP.S.ICMP
|
||
.INB LIB/LIBTCPIP.S.IP
|
||
.INB LIB/LIBTCPIP.S.SKT
|
||
.INB LIB/LIBTCPIP.S.TCP
|
||
.INB LIB/LIBTCPIP.S.UDP
|
||
*--------------------------------------
|
||
CS.END
|
||
*--------------------------------------
|
||
ARP.REQ .DA S.ARP-2 Frame size
|
||
ARP.REQ.DSTMAC .HS FFFFFFFFFFFF
|
||
ARP.REQ.SRCMAC .BS 6
|
||
ARP.REQ.ETYPE .DA /S.ETH.ETHERTYPE.ARP
|
||
.DA #S.ETH.ETHERTYPE.ARP
|
||
.HS 0001.0800.06.04
|
||
ARP.REQ.OP .DA /S.ARP.OPERATION.REQ
|
||
.DA #S.ARP.OPERATION.REQ
|
||
ARP.REQ.SHA .BS 6
|
||
ARP.REQ.SPA .BS 4
|
||
ARP.REQ.THA .BS 6
|
||
ARP.REQ.TPA .BS 4
|
||
*--------------------------------------
|
||
ARP.REP .DA S.ARP-2 Frame size
|
||
ARP.REP.DSTMAC .BS 6
|
||
ARP.REP.SRCMAC .BS 6
|
||
ARP.REP.ETYPE .DA /S.ETH.ETHERTYPE.ARP
|
||
.DA #S.ETH.ETHERTYPE.ARP
|
||
.HS 0001.0800.06.04
|
||
ARP.REP.OP .DA /S.ARP.OPERATION.REP
|
||
.DA #S.ARP.OPERATION.REP
|
||
ARP.REP.SHA .BS 6
|
||
ARP.REP.SPA .BS 4
|
||
ARP.REP.THA .BS 6
|
||
ARP.REP.TPA .BS 4
|
||
*--------------------------------------
|
||
TCP.MSG .DA S.TCP-2+4 +4 bytes for MSS option
|
||
.BS 12 ETH:MAC+MAC
|
||
.DA /S.ETH.ETHERTYPE.IP
|
||
.DA #S.ETH.ETHERTYPE.IP
|
||
|
||
.DA $0045 IP:
|
||
.BS 6 LEN+ID+Frag
|
||
.DA #K.IP.TTL
|
||
.DA #S.IP.PROTOCOL.TCP
|
||
.BS 2 Checksum
|
||
.BS 8 IP:DST,SRC
|
||
|
||
.BS 4 TCP:Ports
|
||
.BS 8 SEQ,ACK
|
||
.DA #$60 6 DWORD
|
||
.BS 1 Options
|
||
.DA /K.TCP.WSIZE
|
||
.DA #K.TCP.WSIZE
|
||
.BS 4 CHK,URG
|
||
.HS 0204 MSS option
|
||
.DA /K.TCP.MSS
|
||
.DA #K.TCP.MSS
|
||
*--------------------------------------
|
||
DNS.SOCKET .DA #S.SOCKET.SOCK.DGRAM
|
||
.BS 3
|
||
DNS.SOCKET.SA .BS 4
|
||
DNS.SOCKET.SP .DA 0 Dynamic
|
||
DNS.SOCKET.DA .BS 4
|
||
DNS.SOCKET.DP .DA UDP.PORT.DNS
|
||
.BS 16
|
||
*--------------------------------------
|
||
DNS.MSG.LEN .BS 2
|
||
DNS.MSG
|
||
DNS.MSG.ID .BS 2
|
||
.DA /S.DNS.F.RD Flags=query
|
||
.DA #S.DNS.F.RD
|
||
.DA $100 QDCOUNT
|
||
.BS 6 ANCOUNT,NSCOUNT,ARCOUNT
|
||
DNS.MSG.NAME .BS K.DNS.MAXLEN+6
|
||
*--------------------------------------
|
||
IPCFG .BS S.IPCFG
|
||
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||
SKT.TABLE .BS K.SKTTABLE.SIZE*S.SOCKET
|
||
FRM.QUEUE.Tail .BS 1
|
||
FRM.QUEUE.Head .BS 1
|
||
FRM.QUEUE.hMem .BS K.FRMQUEUE.SIZE
|
||
FRM.QUEUE.State .BS K.FRMQUEUE.SIZE
|
||
FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE
|
||
*--------------------------------------
|
||
bFirstLoad .DA #0
|
||
DevFlags .BS 1
|
||
DYNPORT.LAST .BS 2
|
||
hDNSSocket1 .BS 1
|
||
hDNSSocket2 .BS 1
|
||
DNS.HostNameLen .BS 1
|
||
DNS.HostName .BS K.DNS.MAXLEN+1
|
||
DNS.TmpCache .BS S.DNSCACHE
|
||
ARP.TmpCache .BS S.ARP
|
||
TmpDWord .BS 4
|
||
TmpSocket .BS S.SOCKET
|
||
hFrameIn .BS 1
|
||
hFrameOut .BS 1
|
||
hSocket .BS 1
|
||
TmpOffset .BS 2
|
||
HST.DecStr .BS 4
|
||
HST.IP .BS 5
|
||
IP.CHECKSUM .BS 4
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE LIB/LIBTCPIP.S
|
||
ASM
|