10
20 :
30 ON ERROR REPORT:PRINT:IF INKEY-1 END ELSE RUN
40 DIM ctrl% 31,mem% 255:X%=ctrl%:Y%=X%DIV256
50 PRINT "Test peeking and poking remote machines"
60 INPUT "Remote machine: "A$:stn%=FNnet_StnNum(A$)
70 INPUT "Remote address: &"A$:addr%=EVAL("&"+A$)
80 PRINT "Press p(E)ek or p(O)ke:";
90 REPEAT
100 REPEAT A$=CHR$(GET AND &DF):A%=INSTR("EO",A$):UNTIL A%
110 off%=off%+1
120 IF A%=1:PROCpeek ELSE PROCpoke
130 UNTIL FALSE
140 :
150 DEFPROCpeek
160 FOR A%=0 TO 255:mem%?A%=off%-A%:NEXT A%:PRINT " PEEK"
170 !X%=&81:X%!2=stn%:X%!4=mem%:X%!8=mem%+256:X%!12=addr%
180 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0
190 PROCdump:ENDPROC
200 :
210 DEFPROCpoke
220 FOR A%=0 TO 255:mem%?A%=off%+A%:NEXT A%:PRINT " POKE"
230 !X%=&82:X%!2=stn%:X%!4=mem%:X%!8=mem%+256:X%!12=addr%
240 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0
250 PROCdump:ENDPROC
260 :
270 DEFPROCdump
280 FOR A%=0 TO 63 STEP 16:PRINTFNh0(addr%+A%,4);:FOR B%=A% TO A%+15
290 PRINT " ";FNh0(mem%?B%,2);:NEXT B%:PRINT:NEXT A%
300 ENDPROC
310 :
320 :
330 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
340 DEFFNnet_StnNum(A$)
350 A%=INSTR(A$,"."):IFA%:=256*VALLEFT$(A$,A%-1)+VALMID$(A$,A%+1) ELSE =VALA$