100 REM <<< PERCOM DISK CONTROL >>> 105 REM <<< SAMPLE PROGRAM >>> 110 REM REVISED TO WORK W/2 DRIVE SYS. 120 DIM BUF$(12):REM OPTION TABLE 125 DIM R$(1):REM RESPONSES GO HERE 130 Z=ADR(" ") 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 301 SETCOLOR 4,9,4:? "}":? :? 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 NUMBER OF TRACKS=";PEEK(A) 330 PRINT "DRIVE STEP RATE CODE=";PEEK(A+1) 340 PRINT "DRIVE 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 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 440 POKE A+6,0 450 POKE A+7,128 455 POKE 4880+I,1:REM PATCH TO CTRL D2 460 GOTO 500 470 POKE A+5,4:REM MAKE DOUBLE DENSITY 480 POKE A+6,1 490 POKE A+7,0 495 POKE 4880+I,2:REM PATCH TO CTRL D2 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 END 100 REM <<< PERCOM DISK CONTROL >>> 105 REM <<< SAMPLE PROGRAM >>> 110 REM REVISED TO WORK W/2 DRIVE SYS. 120 DIM BUF$(12):REM OPTION TABLE 125 DIM R$(1):REM RESPONSES GO HERE 130 Z=ADR(" ") 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 301 SETCOLOR 4,9,4:? "}":? :? 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 NUMBER OF TRACKS=";PEEK(A) 330 PRINT "DRIVE STEP RATE CODE=";PEEK(A+1) 340 PRINT "DRIVE 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 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 440 POKE A+6,0 450 POKE A+7,128 455 POKE 4880+I,1:REM PATCH TO CTRL D2 460 GOTO 500 470 POKE A+5,4:REM MAKE DOUBLE DENSITY 480 POKE A+6,1 490 POKE A+7,0 495 POKE 4880+I,2:REM PATCH TO CTRL D2 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 END