100 REM <<< PERCOM DISK CONTROL >>> 110 REM <<< SAMPLE PROGRAM >>> 115 REM MODIFIED BY NATHANIEL T. SMITH 120 DIM BUF$(12):REM OPTION TABLE 125 DIM R$(1):REM RESPONSES GO HERE 130 Z=ADR("hLYd") 140 DATA 104,76,89,228 150 FOR I=0 TO 3 160 READ X 170 POKE Z+I,X 180 NEXT I 190 DCB=768 200 DATA 49,1,78,64,0,0,1,0,12,0,1,0 210 REM DEVICE,UNIT,COMMAND,STATUS(DIR), 220 REM BUFFER ADDR,TIMEOUT,SECTOR ADDR 230 FOR I=0 TO 11:REM BUILD THE DCB 240 READ X 250 POKE DCB+I,X 260 NEXT I 270 A=ADR(BUF$):REM INSERT BUFFER ADDRESS 280 X=INT(A/256) 290 POKE DCB+5,X 300 POKE DCB+4,A-X*256 302 PRINT "}DRIVE NUMBER";:INPUT I 304 POKE DCB+1,I:REM SET DRIVE IN DCB 310 X=USR(Z):REM READ THE OPTION TABLE 320 PRINT "}DRIVE ";I;" NUMBER OF TRACKS=";PEEK(A) 330 PRINT "DRIVE ";I;" STEP RATE CODE=";PEEK(A+1) 340 PRINT "DRIVE ";I;" SECTORS/TRACK=";PEEK(A+3) 350 PRINT PEEK(A+4)+1;" SIDED DRIVE" 360 IF PEEK(A+5)=0 THEN PRINT "SINGLE DENSITY":GOTO 380 370 IF PEEK(A+5)=4 THEN PRINT "DOUBLE DENSITY" 380 PRINT PEEK(A+6)*256+PEEK(A+7);" BYTES/SECTOR" 390 PRINT 391 ? "CHANGE OPTION TABLE (Y/N)";:INPUT R$:IF ASC(R$)=ASC("N") THEN 530 392 IF ASC(R$)=ASC("Y") THEN 600 393 GOTO 391 400 PRINT "Make it single (S) or double (D)" 410 PRINT " density";:INPUT R$ 420 IF ASC(R$)=ASC("D") THEN 470 430 POKE A+5,0:REM MAKE SINGLE DENSITY 460 GOTO 500 470 POKE A+5,4:REM MAKE DOUBLE DENSITY 500 POKE DCB+3,128:REM SET DIRECTION FOR WRITE 510 POKE DCB+2,79:REM SET COMMAND (WRITE OPTION) 520 X=USR(Z):REM UPDATE DRIVE OPTIONS 530 ? "}":RUN 600 ? :? "NUMBER OF TRACKS=";:INPUT ANS:POKE A,ANS 610 ? :? "( 0=30ms 1=20ms 2=12ms 3=6ms )" 620 ? :? "STEP RATE CODE=";:INPUT ANS:POKE A+1,ANS 625 ? :? "SECTORS/TRACK";:INPUT ANS:POKE A+3,ANS 630 ? :? "NUMBER OF SIDES=";:INPUT ANS:POKE A+4,ANS-1 640 ? :? "BYTES/SECTOR=";:INPUT ANS:POKE A+6,INT(ANS/256):POKE A+7,ANS-(PEEK(A+6)*256) 650 GOTO 400