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 POLL .DA PULSEA .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 HST.GETBYNAME .DA HST.GETBYADDR .DA SKT.New .DA SKT.CLOSEA .DA SKT.GETTABLE .DA SKT.GETA .DA SKT.ACCEPTA .DA $FFFF .DA SKT.Write .DA SKT.Read .DA SKT.ReadA .DA SKT.PutC .DA SKT.PutS .DA SKT.GetCA .DA SKT.GetS *-------------------------------------- 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.Template .DA SKT.Template 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 >PUSHWI K.SKTTABLE.SIZE*S.SOCKET >PUSHBI S.MEM.F.INIT0 >SYSCALL GetMem bcs .9 stx hSocketTable inc bFirstLoad .8 clc .9 rts *-------------------------------------- LIB.UNLOAD lda hSocketTable beq .8 >SYSCALL FreeMemA .8 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 *-------------------------------------- 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 *-------------------------------------- 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 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 hSocketTable .BS 1 DevFlags .BS 1 DYNPORT.LAST .DA K.DYNPORT.START 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 SKT.Template .BS S.SOCKET.TEMPLATE SKT.TCBCache .BS S.SOCKET TmpDWord .BS 4 TmpOffset .BS 2 hFrameIn .BS 1 hFrameOut .BS 1 hSocket .BS 1 bTextMode .BS 1 HST.DecStr .BS 4 HST.IP .BS 5 IP.ID .BS 2 IP.CHECKSUM .BS 4 *-------------------------------------- MAN SAVE LIB/LIBTCPIP.S ASM