0100 ; DRIVE BENCHMARKS 0110 ; ---------------- 0120 ; Resident disk handler equates 0130 ; 0140 DUNIT = $0301 ; drive # 0150 DCOMND = $0302 ; command register 0160 DBUFLO = $0304 ; lsb of buffer addr 0170 DBUFHI = $0305 ; msb of buffer addr 0180 DAUX1 = $030A ; lsb of sector # 0190 DAUX2 = $030B ; msb of sector # 0200 DSKINV = $E453 ; disk handler entry addr 0210 ; 0220 READ = $52 ; READ SECTOR command 0230 FORMAT = $21 ; FORMAT DISK command 0240 ; 0250 ORIGIN = $0600 ; start of executable code 0260 BUFFER = $0480 ; dummy buffer for sector data 0270 INDEX = $CB ; loop index register 0280 TICK = $14 ; lsb of system timer 0290 TOCK = $13 ; msb of system timer 0300 FR0 = $D4 ; function return register 0310 ; 0320 *= ORIGIN 0330 ; 0340 ; TEST #1 0350 ; ------- 0360 ; 0370 PLA ; # arguments; ignore 0380 ; 0390 LDA #1 0400 STA DUNIT ; specify drive #1 0410 ; 0420 LDA #FORMAT 0430 STA DCOMND ; specify FORMAT command 0440 ; 0450 LDA # BUFFER ; where our 128-byte 0480 STA DBUFHI ; dummy buffer is 0490 ; 0500 LDA #0 0510 STA TOCK 0520 STA TICK ; zero system timer 0530 ; 0540 JSR DSKINV ; let OS format disk 0550 LDA TICK 0560 STA FR0 ; put timer reading 0570 LDA TOCK ; into BASIC's 0580 STA FR0+1 ; function return register 0590 RTS ; all done 0600 ; 0610 ; TEST #2 0620 ; ------- 0630 ; 0640 PLA ; # arguments; ignore 0650 ; 0660 LDA #1 0670 STA DUNIT ; specify drive #1 0680 ; 0690 LDA #READ 0700 STA DCOMND ; specify READ command 0710 ; 0720 LDA # BUFFER ; where our 128-byte 0750 STA DBUFHI ; dummy buffer is 0760 ; 0770 CLD ; for safety 0780 LDA #0 0790 STA FR0 0800 STA FR0+1 ; zero sum 0810 LDA #7 0820 STA INDEX ; init index 0830 ; 0840 BACK 0850 LDA #1 0860 STA DAUX1 0870 LDA #0 0880 STA DAUX2 ; point to sector 1 0890 ; 0900 JSR DSKINV ; and fetch it 0910 ; 0920 LDA #0 0930 STA TICK ; zero timer 0940 ; 0950 LDA # <720 0960 STA DAUX1 0970 LDA # >720 ; now point to 0980 STA DAUX2 ; sector 720 0990 ; 1000 JSR DSKINV ; and fetch that 1010 ; 1020 LDA TICK ; get reading 1030 CLC 1040 ADC FR0 ; add to previous 1050 STA FR0 ; readings 1060 BCC FORTH 1070 INC FR0+1 1080 ; 1090 FORTH 1100 ; 1110 LDA #0 1120 STA TICK ; zero timer 1130 ; 1140 STA DAUX2 1150 LDA #1 1160 STA DAUX1 ; point to sector 1 1170 ; 1180 JSR DSKINV ; fetch it 1190 ; 1200 LDA TICK ; get new time 1210 CLC ; add to previous 1220 ADC FR0 ; readings 1230 STA FR0 1240 BCC NEXT 1250 INC FR0+1 1260 ; 1270 NEXT 1280 DEC INDEX ; loop 8 times 1290 BPL BACK 1300 RTS ; and return to BASIC 1310 ; 1320 .END