10
20
30 :
40 DIM ctrl% 31,name% 31:X%=ctrl%:Y%=X%DIV256
50 act%=3:ptr%=0:mem%=&FFFF7C00:chn%=0
60 ON ERROR REPORT:PROCClose:PRINT:END
70 :
80 MODE7:PRINTTAB(0,7);"^^^ I/O memory ^^^ ---- vvv Language vvv";TAB(0,15)
90 chn%=OPENIN("TestGBP")
100 IF chn%=0:chn%=OPENIN("TestGB*")
110 IF chn%=0:PROCgbpb(8,0,name%,1,0):name%?(?name%+1)=13:IFname%?1>32:chn%=OPENIN($(name%+1))
120 IF chn%=0:PRINT"Can't open test file":END
130 ext%=EXT#chn%
140 REPEAT
150 PRINT TAB(0,15):PROCgbpb(act%,chn%,mem%,240,ptr%)
160 PRINT"&B0: "FNh0(!&B0,8)" "FNh0(!&B4,8)" "FNh0(!&B8,8)" "FNh0(!&BC,8);CHR$8
170 PRINT"&C0: "FNh0(!&C0,8)" "FNh0(!&C4,8)" "FNh0(!&C8,8)" "FNh0(!&CC,8);CHR$8
180
190 PRINTTAB(0,8);:FORA%=mem%AND&1FFFF TO (mem%+255)AND&1FFFF:VDU?A%OR&80:NEXT:PRINT
200 PRINTTAB(0,20);"<TAB>:Toggle IO/Lang <ENT>:ptr+40"'"<SPC>:Toggle action <DEL>:ptr-40"
210 PRINT"R:Repeat call ";
220 A%=GET:IF A%=32:act%=7-act%
230 IF A%=9 :mem%=mem%EOR&FFFE0000
240 IF A%=127:ptr%=ptr%-40:IFptr%<0:ptr%=0
250 IF A%=13 :ptr%=ptr%+40:IFptr%>ext%:ptr%=ptr%-40
260 UNTIL0
270 :
280 :
290 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
300 DEFPROCClose:IFchn%:A%=chn%:chn%=0:CLOSE#A%
310 ENDPROC
320 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%
330 PRINT"IN: "FNh0(A%,2)" "FNh0(A%,2)" "FNh0(?X%,2)" "FNh0(X%!1,8)" "FNh0(X%!5,8)" "FNh0(X%!9,8);CHR$8
340 PRINT'''':A%=USR&FFD1:VDU11,11,11,11,11
350 PRINT"OUT: C";MID$("SC",2+((A%AND&1000000)<>0),1);" "FNh0(A%,2)" "FNh0(?X%,2)" "FNh0(X%!1,8)" "FNh0(X%!5,8)" "FNh0(X%!9,8);CHR$8
360 ENDPROC