PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/SBIN/TCPIP *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/LIBTCPIP.I *-------------------------------------- ZPFrameBase1 .EQ ZPBIN ZPFrameLen1 .EQ ZPBIN+2 ZPFramePtr1 .EQ ZPBIN+4 ZPFrameBase2 .EQ ZPBIN+6 ZPFrameLen2 .EQ ZPBIN+8 ZPFramePtr2 .EQ ZPBIN+10 ZPIPCfgPtr .EQ ZPBIN+12 ZPIPDevPtr .EQ ZPBIN+14 *-------------------------------------- * 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 Code Length To Relocate .DA 0 .DA 0 .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.MSG.HELP .DA MSG.HELP L.MSG.CFG .DA MSG.CFG L.MSG.CFG.KO .DA MSG.CFG.KO L.MSG.CFG.OK .DA MSG.CFG.OK L.HOSTNAME .DA HOSTNAME L.TCPIP.CONF .DA TCPIP.CONF L.IPCFG .DA IPCFG .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL SYS.LoadLibYA bcs .99 sta hLIBTCPIP ldy #S.PS.hARGS lda (pPs),y bne .1 >LDYA L.MSG.HELP >SYSCALL SYS.PSTROutYA lda #0 sec rts .1 jsr CS.INIT.DEV bcs .99 jsr CFG.Read continue even if error opening CFG file ldx #S.IPCFG.HOSTNAME lda IPCFG,x bne .3 ldy #0 .2 lda DefaultHostName,y sta IPCFG,x beq .3 inx iny bne .2 .3 >PUSHW L.IPCFG >PUSHBI K.PROTOID.IP >SYSCALL SYS.AddNetCfg bcs .99 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc .99 rts *-------------------------------------- CS.INIT.DEV ldy #S.PS.hARGS lda (pPs),y >PUSHA >PUSHBI $20 Push SEP=' ' >PUSHBI 1 Push 1 for getting DEV >SYSCALL SYS.PStrGetTkn bcs .99 sta hDEVNAME save DevName for discard >SYSCALL SYS.GetDevByNameA bcs .98 >STYA pNetDevJmp+1 txa sta hNetDev ldx #S.IPCFG.HDEV sta IPCFG,x ldx #DEVMGR.OPEN jsr pNetDevJmp bcs .98 ldx #DEVMGR.GETINFO jsr pNetDevJmp bcs .98 >STYA ZPIPDevPtr ldy #1 lda (ZPIPDevPtr),y sta DEVFLAGS iny ldx #S.IPCFG.MAC .1 lda (ZPIPDevPtr),y sta IPCFG,x iny inx cpx #S.IPCFG.MAC+6 bne .1 jsr .98 clc rts .98 pha lda hDEVNAME >SYSCALL SYS.FreeMemA pla .99 sec rts *-------------------------------------- CS.RUN clc rts *-------------------------------------- CS.DOEVENT lda (pEvent) and #S.EVT.F.NET beq .9 ldy #S.EVT.hDEV lda (pEvent),y cmp hNetDev beq CS.DOEVENT.NET .9 sec rts CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem lda (pEvent),y >SYSCALL SYS.GetMemPtrA >STYA ZPFrameBase1 ldy #S.EVT.DATAW1 Get Frame Len lda (pEvent),y sta ZPFrameLen1 iny lda (pEvent),y sta ZPFrameLen1+1 ldy #S.ETH.ETHERTYPE lda (ZPFrameBase1),y tax iny lda (ZPFrameBase1),y cmp #S.ETH.ETHERTYPE.ARP bne .1 cpx /S.ETH.ETHERTYPE.ARP bne .1 jsr ARPListener bcc .89 rts .1 cmp #S.ETH.ETHERTYPE.IP bne .99 cpx /S.ETH.ETHERTYPE.IP bne .99 ldy #S.IP.PROTOCOL lda (ZPFrameBase1),y cmp #S.IP.PROTOCOL.ICMP bne .2 jsr ICMPListener bcc .89 rts .2 cmp #S.IP.PROTOCOL.UDP bne .21 ldy #S.UDP.DSTPORT lda /UDP.PORT.DNS cmp (ZPFrameBase1),y bne .3 iny lda #UDP.PORT.DNS cmp (ZPFrameBase1),y bne .3 jsr DNSListener bcc .89 rts .21 >PUSHW ZPFrameLen1 >PUSHW ZPFrameBase1 >LIBCALL hLIBTCPIP,LIBTCPIP.UDP.LISTENER bcc .89 rts .3 cmp #S.IP.PROTOCOL.TCP bne .99 >PUSHW ZPFrameLen1 >PUSHW ZPFrameBase1 >LIBCALL hLIBTCPIP,LIBTCPIP.TCP.LISTENER bcc .89 rts .89 clc rts .99 sec rts *-------------------------------------- CS.QUIT ldx #DEVMGR.CLOSE jsr pNetDevJmp lda hLIBTCPIP >SYSCALL SYS.UnloadLibA clc rts *-------------------------------------- *-------------------------------------- *-------------------------------------- *-------------------------------------- GetIPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG >STYA ZPIPCfgPtr ldy #S.IPCFG .1 dey lda (ZPIPCfgPtr),y sta IPCFG,y tya bne .1 rts *-------------------------------------- MakeIPReply >LDAXI S.IP.SRC jsr SetFramePtr1AX >LDAXI S.IP.DST jsr SetFramePtr2AX ldy #4 jsr CopyFramePtr12 >LDAXI S.IP.DST jsr SetFramePtr1AX >LDAXI S.IP.SRC jsr SetFramePtr2AX ldy #4 jsr CopyFramePtr12 >LDAXI S.ETH.SRCMAC jsr SetFramePtr1AX >LDAXI S.ETH.DSTMAC jsr SetFramePtr2AX ldy #6 jsr CopyFramePtr12 rts *-------------------------------------- * A,X = Frame PTR *-------------------------------------- SetFramePtr1AX clc adc ZPFrameBase1 sta ZPFramePtr1 txa adc ZPFrameBase1+1 sta ZPFramePtr1+1 rts *-------------------------------------- * A,X = Frame PTR *-------------------------------------- SetFramePtr2AX clc adc ZPFrameBase2 sta ZPFramePtr2 txa adc ZPFrameBase2+1 sta ZPFramePtr2+1 rts *-------------------------------------- * Y = bytes to copy from ZPFramePtr1 to ZPFramePtr2 *-------------------------------------- CopyFramePtr12 dey lda (ZPFramePtr1),y sta (ZPFramePtr2),y tya bne CopyFramePtr12 rts *-------------------------------------- pNetDevJmp jmp * *-------------------------------------- .INB SBIN/TCPIP.S.CFG .INB SBIN/TCPIP.S.ARP .INB SBIN/TCPIP.S.DNS .INB SBIN/TCPIP.S.ICMP *-------------------------------------- CS.END *-------------------------------------- LIBTCPIP >PSTRING "libtcpip.o" MSG.HELP >PSTRING "Usage: TCPIP ETHx\n" MSG.CFG >PSTRING "TCPIP:Reading %S..." MSG.CFG.KO >PSTRING "Failed!!! [%h]\n" MSG.CFG.OK >PSTRING "OK.\n" HOSTNAME >PSTRING "${A2OSX}ETC/HOSTNAME" TCPIP.CONF >PSTRING "${A2OSX}ETC/TCPIP.CONF" DefaultHostName >CSTRING "a2osx-host" CFG.Keywords >PSTRING "DOMAIN" >PSTRING "IP" >PSTRING "MASK" >PSTRING "GW" >PSTRING "DNS1" >PSTRING "DNS2" CFG.Keyword.Map .DA #0 End Of Keyword table and NA Keyword .DA #S.IPCFG.IP .DA #S.IPCFG.MASK .DA #S.IPCFG.GW .DA #S.IPCFG.DNS .DA #S.IPCFG.DNS+4 hLIBTCPIP .BS 1 hDEVNAME .BS 1 hNetDev .BS 1 DEVFLAGS .BS 1 IPCFG .BS S.IPCFG Get in cache for faster access with ,X CFG.hCfgFile .BS 1 CFG.FileLen .BS 2 CFG.Keyword .BS 1 CFG.StrBuf .BS 4 CFG.HexByte .BS 1 CFG.IP .BS 5 *-------------------------------------- MAN SAVE SBIN/TCPIP.S ASM