10
20
30 :
40 DIM ctrl% 31:X%=ctrl%:Y%=X%DIV256
50 osw%=&7F:drv%=0:mem%=&FFFF7C00
60 :
70 MODE7:PRINTTAB(0,7);"^^^ I/O memory ^^^ ---- vvv Language vvv"
80 trk%=0:sec%=0
90 REPEAT
100 PRINT TAB(0,16);"OSW: ";~osw%;" Trk: ";trk%;" Sec: ";sec%;" Result: "
110 A%=FNdisk(mem%,&53,drv%,trk%,sec%,1,0):PRINT TAB(31,16);~A%;" "'
120 PRINT"OUT: "FNh0(?X%,2)" "FNh0(X%!1,8);:FOR A%=5 TO 10:PRINT" "FNh0(X%?A%,2);:NEXT:PRINT
130 PRINT"&B0: "FNh0(!&B0,8)" "FNh0(!&B4,8)" "FNh0(!&B8,8)" "FNh0(!&BC,8)" ";CHR$8;CHR$8
140 PRINT"&C0: "FNh0(!&C0,8)" "FNh0(!&C4,8)" "FNh0(!&C8,8)" "FNh0(!&CC,8)" ";CHR$8;CHR$8
150
160 PRINTTAB(0,8);:FORA%=mem%AND&1FFFF TO (mem%+255)AND&1FFFF:VDU?A%OR&80:NEXT:PRINT
170
180 PRINTTAB(0,21);"<TAB>:Toggle IO/Lang <ENT>:Sec+1"'"<SPC>:Toggle &77/&7F <DEL>:Sec-1"
190 PRINTSPC20;CHR$13;"D:Drive ";
200 A%=GET:IF(A%AND&DF)=68:VDU13:INPUT "Select drive: "drv%:A%=0
210 IF A%=32:osw%=osw%EOR8
220 IF A%=9:mem%=mem%EOR&FFFE0000
230 IF A%=127:A%=0:sec%=sec%-1:IFsec%<0:sec%=9:trk%=trk%-1:IFtrk%<0:trk%=0
240 IF A%:sec%=sec%+1:IFsec%>9:sec%=0:trk%=trk%+1
250 UNTIL0
260 :
270 :
280 DEFFNdisk(addr%,cmd%,drv%,trk%,sec%,num%,den%):LOCAL fs%
290 fs%=FNfs:IF fs%<>4:*FX143,18,4
300 REPEAT:X%?0=drv%:X%!1=addr%:X%?5=3:X%?6=cmd%:X%?7=trk%:X%?8=sec%:X%?9=num%OR&20:X%?10=&1E
310 PRINT"IN: "FNh0(?X%,2)" "FNh0(X%!1,8);:FOR A%=5 TO 10:PRINT" "FNh0(X%?A%,2);:NEXT:PRINT
320 A%=osw%:CALL&FFF1:A%=X%?10
330 UNTIL A%<>&10:IF fs%<>4:OSCLI"FX143,18,"+STR$ fs%
340 =A%
350 DEFFNfs:LOCAL A%,E%,Y%:=(USR&FFDA)AND&FF
360 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)