PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/BIN/ARP *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/LIBTCPIP.I *-------------------------------------- TIMEOUT.MAX .EQ 40 40*100ms = 4 sec. *-------------------------------------- ZPPTR1 .EQ ZPBIN *-------------------------------------- * 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 DS.END-DS.START Data Segment to Allocate .DA 0 .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.SSCANF.IP .DA SSCANF.IP L.DST.IP .DA DST.IP L.DST.MAC .DA DST.MAC L.MSG0 .DA MSG0 L.MSG1 .DA MSG1 L.MSG2 .DA MSG2 .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLibYA sta hLIBTCPIP lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts *-------------------------------------- CS.RUN >SYSCALL GetArgC cmp #1 bne .1 jmp CS.RUN.DUMP .1 >PUSHW L.DST.IP >PUSHW L.SSCANF.IP lda #1 >SYSCALL GetArg.A >PUSHYA >SYSCALL SSCANF bcc CS.RUN.QUERY lda #SYSMGR.ERRSYN sec rts *-------------------------------------- CS.RUN.QUERY jsr Init.Timeout .1 >PUSHW L.DST.MAC >PUSHW L.DST.IP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.QUERY bcc .2 success, print & exit jsr Wait.TimeOut bcs .9 >SYSCALL Sleep >SYSCALL GetC bcs .1 cmp #3 beq .8 bra .1 .2 ldx #5 .3 >PUSHB DST.MAC,x dex bpl .3 ldx #3 .4 >PUSHB DST.IP,x dex bpl .4 >LDYA L.MSG2 >SYSCALL PrintF.YA .8 lda #0 .9 sec rts *-------------------------------------- CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GetC.ACHE >STYA ZPPTR1 >LDYA L.MSG0 >SYSCALL PrintF.YA ldx #K.ARPCACHE.SIZE .1 lda (ZPPTR1) beq .4 ldy #S.ARPCACHE.IP+4 .2 dey >PUSHB (ZPPTR1),y cpy #S.ARPCACHE.IP bne .2 ldy #S.ARPCACHE.MAC+6 .3 dey >PUSHB (ZPPTR1),y cpy #S.ARPCACHE.MAC bne .3 ldy #S.ARPCACHE.TTL+1 >PUSHB (ZPPTR1),y dey >PUSHB (ZPPTR1),y >PUSHB (ZPPTR1) >LDYA L.MSG1 phx >SYSCALL PrintF.YA plx .4 lda ZPPTR1 clc adc #S.ARPCACHE sta ZPPTR1 bcc .5 inc ZPPTR1+1 .5 dex bne .1 .8 lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? ldy #TimeOut lda (pData),y beq .9 dec sta (pData),y .9 sec do not discard TIMER event rts *-------------------------------------- CS.QUIT lda hLIBTCPIP >SYSCALL UnloadLibA clc rts *-------------------------------------- Init.Timeout ldy #TimeOut lda #TIMEOUT.MAX sta (pData),y rts *-------------------------------------- Wait.TimeOut sec ldy #TimeOut lda (pData),y beq .9 clc .9 rts *-------------------------------------- CS.END LIBTCPIP >PSTR "libtcpip.o" SSCANF.IP >PSTR "%d.%d.%d.%d" MSG0 >CSTR "STS TTL MAC Address IP Address\r\n" MSG1 >CSTR "$%h %5D %h:%h:%h:%h:%h:%h %d.%d.%d.%d\r\n" MSG2 >CSTR "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\r\n" *-------------------------------------- DS.START hLIBTCPIP .BS 1 DST.IP .BS 4 DST.MAC .BS 6 TimeOut .BS 1 DS.END *-------------------------------------- MAN SAVE /A2OSX.SRC/BIN/ARP.S ASM