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 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.DEVNAME .DA DEVNAME L.MSG.DEV.KO .DA MSG.DEV.KO L.MSG.DEV.OK .DA MSG.DEV.OK 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.HOSTS .DA HOSTS L.IPCFG .DA IPCFG .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL SYS.LoadLibYA bcs .99 sta hLIBTCPIP jsr CS.INIT.DEV bcs .99 jsr CFG.Read continue even if error opening CFG file lda IPCFG+S.IPCFG.HOSTNAME bne .4 ldy #0 .2 lda DefaultHostName,y beq .3 sta IPCFG+S.IPCFG.HOSTNAME,y iny bne .2 .3 lda A2osX.TIMER16 jsr A2CharAX sta IPCFG+S.IPCFG.HOSTNAME,y iny txa sta IPCFG+S.IPCFG.HOSTNAME,y iny lda A2osX.TIMER16+1 jsr A2CharAX sta IPCFG+S.IPCFG.HOSTNAME,y iny txa sta IPCFG+S.IPCFG.HOSTNAME,y iny lda #0 sta IPCFG+S.IPCFG.HOSTNAME,y .4 >PUSHW L.IPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc .99 rts *-------------------------------------- CS.INIT.DEV >LDYA L.DEVNAME >SYSCALL SYS.GetDevByNameYA bcc .1 inc DEVNAME+4 lda DEVNAME+4 cmp #'8' bne CS.INIT.DEV >LDYA L.MSG.DEV.KO >SYSCALL SYS.PSTROutYA lda #DEVMGR.ERRDNF sec rts .1 >STYA pNetDevJmp+1 txa sta hNetDev sta IPCFG+S.IPCFG.HDEV >PUSHW L.DEVNAME >LDYA L.MSG.DEV.OK >SYSCALL SYS.PSTROutYA ldx #DEVMGR.OPEN jsr pNetDevJmp bcs .9 ldx #DEVMGR.GETINFO jsr pNetDevJmp bcs .9 >STYA ZPIPDevPtr ldy #1 lda (ZPIPDevPtr),y sta DEVFLAGS iny ldx #S.IPCFG.MAC .2 lda (ZPIPDevPtr),y sta IPCFG,x iny inx cpx #S.IPCFG.MAC+6 bne .2 clc rts .9 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 bne .9 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 >PUSHW ZPFrameLen1 >PUSHW ZPFrameBase1 >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.IN rts .1 cmp #S.ETH.ETHERTYPE.IP bne .9 cpx /S.ETH.ETHERTYPE.IP bne .9 >PUSHW ZPFrameLen1 >PUSHW ZPFrameBase1 >LIBCALL hLIBTCPIP,LIBTCPIP.IP.IN rts .9 sec rts *-------------------------------------- CS.QUIT lda IPCFG+S.IPCFG.HDEV beq .1 ldx #DEVMGR.CLOSE jsr pNetDevJmp .1 lda hLIBTCPIP >SYSCALL SYS.UnloadLibA clc rts *-------------------------------------- CFG.Read >PUSHW L.HOSTNAME >LDYA L.MSG.CFG >SYSCALL SYS.PSTROutYA jsr CFG.Read.HOSTNAME bcc .1 >PUSHA >LDYA L.MSG.CFG.KO >SYSCALL SYS.PSTROutYA bra .2 .1 >LDYA L.MSG.CFG.OK >SYSCALL SYS.PSTROutYA .2 >PUSHW L.TCPIP.CONF >LDYA L.MSG.CFG >SYSCALL SYS.PSTROutYA jsr CFG.Read.TCPIP.CONF bcc .3 >PUSHA >LDYA L.MSG.CFG.KO >SYSCALL SYS.PSTROutYA bra .4 .3 >LDYA L.MSG.CFG.OK >SYSCALL SYS.PSTROutYA .4 >PUSHW L.HOSTS >LDYA L.MSG.CFG >SYSCALL SYS.PSTROutYA jsr CFG.Read.HOSTS bcc .5 >PUSHA >LDYA L.MSG.CFG.KO >SYSCALL SYS.PSTROutYA bra .6 .5 >LDYA L.MSG.CFG.OK >SYSCALL SYS.PSTROutYA .6 rts *-------------------------------------- CFG.Read.HOSTNAME >LDYA L.HOSTNAME >SYSCALL SYS.LoadFileYA bcs .99 stx CFG.hCfgFile >STYA CFG.FileLen txa >SYSCALL SYS.GetMemPtrA >STYA ZPIPCfgPtr lda CFG.FileLen+1 bne .2 ldy CFG.FileLen beq .2 cpy #15 bcs .2 sta IPCFG+S.IPCFG.HOSTNAME,y .1 dey bmi .89 lda (ZPIPCfgPtr),y sta IPCFG+S.IPCFG.HOSTNAME,y bra .1 .2 jsr .89 sec rts .89 lda CFG.hCfgFile >SYSCALL SYS.FreeMemA clc .99 rts *-------------------------------------- CFG.Read.TCPIP.CONF >LDYA L.TCPIP.CONF >SYSCALL SYS.LoadFileYA bcs .99 stx CFG.hCfgFile >STYA CFG.FileLen txa >SYSCALL SYS.GetMemPtrA >STYA ZPIPCfgPtr .1 jsr CFG.GetLine bcs .89 jsr CFG.GetKeyword bcs .1 lda CFG.Keyword bne .3 ldy TmpBuffer256 lda TmpBuffer256+1,y cmp #35 DOMAIN too long!!! bcs .1 sta IPCFG+S.IPCFG.DOMAIN ldx #0 .2 lda TmpBuffer256+2,y sta IPCFG+S.IPCFG.DOMAIN,x beq .1 inx iny bne .2 bra .1 .3 jsr CFG.ScanIP bcs .1 ldy CFG.Keyword lda CFG.Keyword.Map,y tax ldy #0 .4 lda CFG.IP+1,y sta IPCFG,x inx iny cpy #4 bne .4 lda CFG.Keyword cmp #1 bne .1 lda #S.IPCFG.STATUS.OK sta IPCFG bra .1 .89 lda CFG.hCfgFile >SYSCALL SYS.FreeMemA clc .99 rts *-------------------------------------- CFG.Read.HOSTS >LDYA L.HOSTS >SYSCALL SYS.LoadFileYA bcs .99 stx CFG.hCfgFile >STYA CFG.FileLen txa >SYSCALL SYS.GetMemPtrA >STYA ZPIPCfgPtr .89 lda CFG.hCfgFile >SYSCALL SYS.FreeMemA clc .99 rts *-------------------------------------- CFG.GetLine stz TmpBuffer256 ldx #0 ldy #0 .1 jsr CFG.GetChar bne .2 end of file? txa bne .8 sec rts .2 cmp #$0D beq .8 end of line inx sta TmpBuffer256,x cmp #'=' bne .3 txa dec tay .3 cpx #64 line too long ? bne .1 sec rts .8 tya = found ? beq .9 sta TmpBuffer256 txa sec sbc TmpBuffer256 sta TmpBuffer256+1,y stz TmpBuffer256+1,x End with 0 for ScanIP clc rts .9 sec rts *-------------------------------------- CFG.GetChar lda CFG.FileLen bne .1 lda CFG.FileLen+1 beq .9 dec CFG.FileLen+1 .1 dec CFG.FileLen lda (ZPIPCfgPtr) inc ZPIPCfgPtr bne .9 inc ZPIPCfgPtr+1 NZ .9 rts *-------------------------------------- CFG.GetKeyword stz CFG.Keyword ldx #0 .1 phx ldy #0 .2 lda CFG.Keywords,x cmp TmpBuffer256,y bne .3 cpy TmpBuffer256 beq .4 inx iny bne .2 plx sec rts .3 inc CFG.Keyword plx txa sec adc CFG.Keywords,x tax lda CFG.Keywords,x bne .1 sec rts .4 plx clc rts *-------------------------------------- CFG.ScanIP stz CFG.IP ldx TmpBuffer256 .1 ldy #0 .11 lda TmpBuffer256+2,x beq .3 cmp #'0' bcc .2 cmp #'9'+1 bcs .2 cpy #3 beq .9 iny sta CFG.StrBuf,y inx bra .11 .2 cmp #'.' bne .9 .3 sty CFG.StrBuf lda CFG.IP cmp #4 beq .9 jsr CFG.Dec2Hex bcs .9 lda CFG.HexByte inc CFG.IP ldy CFG.IP sta CFG.IP,y inx lda TmpBuffer256+1,x bne .1 clc rts .9 sec rts *-------------------------------------- CFG.Dec2Hex sec ldy CFG.StrBuf beq .9 lda CFG.StrBuf+1 and #$0f sta CFG.HexByte ldy #1 .1 cpy CFG.StrBuf beq .8 iny lda CFG.HexByte asl CFG.HexByte bcs .9 asl CFG.HexByte bcs .9 adc CFG.HexByte bcs .9 asl bcs .9 sta CFG.HexByte lda CFG.StrBuf,y and #$0f adc CFG.HexByte sta CFG.HexByte bcc .1 .9 rts .8 clc rts *-------------------------------------- A2CharAX pha lsr lsr lsr lsr and #$0F ora #$30 cmp #'9'+1 bcc .1 adc #6 .1 tax pla and #$0F ora #$30 cmp #'9'+1 bcc .8 adc #6 .8 rts *-------------------------------------- pNetDevJmp jmp * *-------------------------------------- CS.END *-------------------------------------- LIBTCPIP >PSTRING "libtcpip.o" DEVNAME >PSTRING "ETH1" MSG.DEV.KO >PSTRING "TCPIP:No Device Found, exiting.\n" MSG.DEV.OK >PSTRING "TCPIP:Bound To Device : %S\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" HOSTS >PSTRING "${A2OSX}ETC/HOSTS" DefaultHostName >CSTRING "a2osx-" 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.DNS1 .DA #S.IPCFG.DNS2 hLIBTCPIP .BS 1 hNetDev .BS 1 DEVFLAGS .BS 1 IPCFG .BS S.IPCFG 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