PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.DEV/BIN/RPCDUMP *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/LIBTCPIP.I *-------------------------------------- TIMEOUT.MAX .EQ 40 40*100ms = 4 sec. *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN ZPFrameBase .EQ ZPBIN+2 *-------------------------------------- * 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 DS.END-DS.START Data Segment to Allocate .DA 0 .DA 0 *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.Socket .DA Socket L.Socket.Dst.Addr .DA Socket.Dst.Addr L.RPC.Request .DA RPC.Request L.MSG.USAGE .DA MSG.USAGE L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.TIMEOUT .DA MSG.TIMEOUT L.MSG.DUMP0 .DA MSG.DUMP0 L.MSG.DUMP1 .DA MSG.DUMP1 .DA 0 *-------------------------------------- CS.INIT >SYSCALL GetArgC cmp #1 beq .99 >LDYA L.LIBTCPIP >SYSCALL LoadLibYA sta hLIBTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? bcs .99 >STYA ZPIPCfgPtr lda (ZPIPCfgPtr) Configured ? bpl .99 ldx #3 ldy #S.IPCFG.IP+3 .1 lda (ZPIPCfgPtr),y sta Socket.Src.Addr,x dey dex bpl .1 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts .99 >LDYA L.MSG.USAGE >SYSCALL CPrintFYA lda #SYSMGR.ERRSYN sec rts *-------------------------------------- CS.RUN jsr Init.Timeout .1 >PUSHW L.Socket.Dst.Addr lda #1 >SYSCALL GetArgA >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc .2 >SYSCALL Sleep jsr Wait.Timeout bcc .1 lda #1 >SYSCALL GetArgA >PUSHYA >LDYA L.MSG.UNKNOWN >SYSCALL CPrintFYA sec rts .2 >PUSHW L.Socket >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW bcs .99 txa ldy #hSocket sta (pData),y .3 >PUSHWI RPC.Request.End-RPC.Request >PUSHW L.RPC.Request ldy #hSocket >PUSHB (pData),y >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND bcc .4 >SYSCALL Sleep jsr Wait.Timeout bcc .3 bra .99 .4 jsr Init.Timeout .5 ldy #hSocket lda (pData),y >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA bcc .6 >SYSCALL Sleep jsr Wait.Timeout bcc .5 bra .99 .6 ldy #hFrame sta (pData),y >SYSCALL GetMemPtrA >STYA ZPFrameBase jsr DumpRPCFrame ldy #hFrame lda (pData),y >SYSCALL FreeMemA lda #0 sec rts .99 lda #1 >SYSCALL GetArgA >PUSHYA >LDYA L.MSG.TIMEOUT >SYSCALL CPrintFYA sec rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .1 is it a TIMER event? ldy #TimeOut lda (pData),y beq .9 dec sta (pData),y .9 sec do not discard TIMER event rts .1 bit #S.EVT.F.KEY is it a KEY event? beq .8 ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y ldy #S.PS.hINDEV cmp (pPs),y bne .9 ldy #S.EVT.DATAHI is it an O or SAPPLE key ? lda (pEvent),y bne .9 ldy #S.EVT.DATALO lda (pEvent),y cmp #$03 Ctrl-C bne .8 lda #$FF ldy #bCTRLC sta (pData),y bra .8 .8 clc rts *-------------------------------------- CS.QUIT ldy #hSocket lda (pData),y >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA lda hLIBTCPIP beq .8 >SYSCALL UnloadLibA .8 clc rts *-------------------------------------- Init.Timeout ldy #TimeOut lda #TIMEOUT.MAX sta (pData),y rts *-------------------------------------- Wait.TimeOut sec ldy #TimeOut lda (pData),y beq .9 ldy #bCTRLC lda (pData),y bmi .9 clc .9 rts *-------------------------------------- DumpRPCFrame lda #S.UDP+24 clc adc ZPFrameBase sta ZPFrameBase lda /S.UDP+24 adc ZPFrameBase+1 sta ZPFrameBase+1 >LDYA L.MSG.DUMP0 >SYSCALL CPrintFYA .1 ldy #3 lda (ZPFrameBase),y Value follows? beq .9 ldy #18 port >PUSHB (ZPFrameBase),y iny >PUSHB (ZPFrameBase),y ldy #15 proto >PUSHB (ZPFrameBase),y ldy #11 version >PUSHB (ZPFrameBase),y ldy #4 program .7 >PUSHB (ZPFrameBase),y iny cpy #8 bne .7 >LDYA L.MSG.DUMP1 >SYSCALL CPrintFYA lda #20 clc adc ZPFrameBase sta ZPFrameBase bcc .1 inc ZPFrameBase+1 bra .1 .9 rts *-------------------------------------- CS.END LIBTCPIP >PSTR "libtcpip.o" MSG.USAGE >CSTR "Usage : RPCDUMP \n" MSG.UNKNOWN >CSTR "%S: Unknown host\n" MSG.TIMEOUT >CSTR "No response from %S\n" MSG.DUMP0 >CSTR "Program Ver Proto:Port\n" MSG.DUMP1 >CSTR "%10L %2d %2d:%D\n" Socket .DA #S.SOCKET.SOCK.DGRAM .BS 3 Socket.Src.Addr .BS 4 Socket.Src.Port .DA 0 Dynamic Socket.Dst.Addr .BS 4 Socket.Dst.Port .DA UDP.PORT.PMAP .BS 16 *-------------------------------------- RPC.Request .HS 12345678 XID .HS 00000000 0=CALL .HS 00000002 RPCVERS .HS 000186A0 PROG=portmapper .HS 00000002 VERS .HS 00000004 PMAPPROC_DUMP .HS 00000000 CRED .HS 00000000 .HS 00000000 VERF .HS 00000000 RPC.Request.End .EQ * hLIBTCPIP .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START hSocket .BS 1 hFrame .BS 1 TimeOut .BS 1 bCTRLC .BS 1 DS.END .ED *-------------------------------------- MAN SAVE BIN/RPCDUMP.S ASM