10 REM > BLib.MemIO 1.02 24-Jan-2018
   20 REM Memory access
   30 REM v1.00 15-Apr-2011 Initial version
   40 REM v1.01 31-Jan-2016 Added io_call()
   50 REM v1.02 24-Jan-2018 mem_rd() can select sideways ROMs
   60 :
   70 DIM ctrl% 31:X%=ctrl%:Y%=X%DIV256
   80 END
   90 :
  100 REM Requires: X%=>5-byte block, Y%=X%DIV256
  110 :
  120 DEFPROCmem_rd(mem%,io%,rom%,num%)
  130 IFFNfx(130,0)=&FFFF:LOCALY%,!&F6:Y%=rom%:FORA%=0TOnum%-1:!&F6=io%+A%:mem%?A%=USR&FFB9:NEXT:ENDPROC
  140 PROCmem_wr(0,0,rom%,0):IFnum%=0:ENDPROC
  150 A%=5:REPEAT:!X%=io%:CALL&FFF1:?mem%=X%?4:io%=io%+1:mem%=mem%+1:num%=num%-1
  160 UNTILnum%<1:ENDPROC
  170 :
  180 DEFPROCmem_wr(mem%,io%,rom%,num%)
  190 IFFNfx(130,0)=&FFFF:FORA%=0TOnum%-1:io%?A%=mem%?A%:NEXT:ENDPROC
  200 IFnum%=0:X%?4=rom%:PROCmem_wr(X%+4,&F4,0,1):mem%=X%+4:io%=&FE30:num%=1
  210 A%=6:REPEAT:!X%=io%:X%?4=?mem%:CALL&FFF1:io%=io%+1:mem%=mem%+1:num%=num%-1
  220 UNTILnum%<1:ENDPROC
  230 :
  240 DEFPROCio_call(io%,A$)
  250 !X%=&200:A%=6:REPEAT:X%?4=io%:CALL&FFF1:io%=io%DIV256:?X%=?X%+1:UNTIL?X%=2
  260 OSCLI"LINE "+A$:ENDPROC
  270 :
  280 DEFFNio_call(io%,B%,C%)
  290 !X%=&200:A%=6:REPEAT:X%?4=io%:CALL&FFF1:io%=io%DIV256:?X%=?X%+1:UNTIL?X%=2
  300 =FNfx(136,B%+256*,C%)
  310 :
  320 DEFFNfx(A%,X%):LOCALY%:=((USR&FFF4)AND&FFFF00)DIV256
  330 :