10 REM > TestOsw7F
   20 REM Test OSWORD &77, &7F
   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   REM PRINT"&A8: "FNh0(!&A8,8)" "FNh0(!&AC,8)
  160   PRINTTAB(0,8);:FORA%=mem%AND&1FFFF TO (mem%+255)AND&1FFFF:VDU?A%OR&80:NEXT:PRINT
  170   REM PRINTTAB(0,0);:FORA%=mem%AND&1FFFF TO (mem%+550)AND&1FFFF:VDU?A%OR&80:NEXT:PRINT
  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%)