.TITLE RPCHECK .IDENT /MRHV01/ .SBTTL INTRO PAGE .LIST MEB ; ;THIS PROGRAM IS DESIGNED TO CHECK OUT THE CONDITION OF THE SURFACE OF ;A DEC RK05 DRIVE. IT WILL ; ;1 READ THE ENTIRE DISK IN 12. BLOCK INCREMENTS (ONE FULL TRACK) ; ; ;3 MONITOR THE IOSTATUS RETURN TO SEE IF THE READ FAILED AND ; REPORT THIS AS A "HARD" ERROR ; ;4 IF ERROR OCCURS, RETRY 1 BLOCK AT A TIME ; ; ;NOTE NOTE NOTE ; ; ; ;DEFINE SOME NEEDED VARIABLES ; RPM1=176726 READSZ=12.*1000 ;NUMBER OF BYTES IN 12. BLOCKS READ1=1000 ;NUMBER OF BYTES IN 1 BLOCK BLOCKH=0 BLOCKL=011300 ; ; .MCALL QIOW$,DIR$,EXIT$S,GMCR$ .PAGE .SBTTL THE CODE ; ;FIRST SET THINGS UP ; START: DIR$ #GETMCR ;SO WE RECALL THE CALLER MOV #0,REAQIO+Q.IOPL+6 ;START AT BLOCK # 0 MOV #0,REAQIO+Q.IOPL+10 REGO: DIR$ #REAQIO ;DO DISK READ TSTB IOSB ;DID READ GO OK BPL READOK ;BR IF OK JSR PC,HARDNG ;ELSE REPORT ERROR JSR PC,RETRY ;AND RETRY 1 BLOCK AT A TIME READOK: ADD #12.,REAQIO+Q.IOPL+10 ;BUMP READ BY 12 BLOCKS CMP #BLOCKL,REAQIO+Q.IOPL+10 ;OF DISK BHI REGO MOV #DONE,ERRQIO+Q.IOPL MOV #DONELN,ERRQIO+Q.IOPL+2 DIR$ #ERRQIO ;REPORT IT EXIT$S ;AND EXIT SYSTEM .PAGE .SBTTL SUBROUTINES ; ;SUB TO REPORT HARD ERROR ; HARDNG: MOV #HARDP1,R0 ;POINT TO BUFFER MOV REAQIO+Q.IOPL+6,R1 ;GET HIGH PART OF BLOCK NUMBER CLR R2 ;INDICATE 0 SUPPRESSION JSR PC,$CBOMG ;CONVERT NUMBER MOVB #',,(R0)+ ;PUT IN A COMMA MOV REAQIO+Q.IOPL+10,R1 ;GET LOW PART OF BLOCK NUMBER INC R2 ;MAKE THIS 6 DIGITS JSR PC,$CBOMG ;CONVERT IT MOV #HARDER,ERRQIO+Q.IOPL ;FILL IN MESSAGE START IN DPB MOV #HARDLN,ERRQIO+Q.IOPL+2 ;AND LENGTH DIR$ #ERRQIO ;AND REPORT ERROR RTS PC ;AND RETURN ; ;SUB TO RETRY 1 BLOCK AT A TIME ; RETRY: MOV #READ1,REAQIO+Q.IOPL+2 ;CHANGE TO 1 BLOCK READ MOV REAQIO+Q.IOPL+10,-(SP) ;SAVE BLOCK NUMBERS MOV REAQIO+Q.IOPL+6,-(SP) MOV #12.,R4 ;SET UP LOOP COUNT 11$: DIR$ #REAQIO ;DO DISK READ TSTB IOSB ;DID READ GO OK BPL 1$ ;BR IF OK JSR PC,HARDNG ;ELSE REPORT ERROR 1$: INC REAQIO+Q.IOPL+10 ;BUMP READ BY 1 BLOCK SOB R4,11$ ;DO IT FOR 12. BLOCKS MOV #READSZ,REAQIO+Q.IOPL+2 ;RESET SIZE TO 12. BLOCKS MOV (SP)+,REAQIO+Q.IOPL+6 ;RESTORE DISK BLOCK NUMBERS MOV (SP)+,REAQIO+Q.IOPL+10 RTS PC ;AND RETURN .PAGE .SBTTL DATA AREAS ; ;QIO FOR MESSAGES TO TI ; ERRQIO: QIOW$ IO.WVB,5,1,,,,<0,0,40> ; ;NOW POSSIBLE MESSAGES ; ; HARDER: .ASCII /HARD ERROR STARTING AT BLOCK # / HARDP1: .ASCII /N,NNNNNN/ HARDLN=.-HARDER ; DONE: .ASCII /READ CHECK FINISHED/ DONELN=.-DONE .EVEN ; ;NOW THE DISK READ QIO ; REAQIO: QIOW$ IO.RLB,2,1,,IOSB,, ; IOSB: .WORD 0,0 ;RETURNED STATUS ; GETMCR: GMCR$ ;GET MCR DPB ; ;MISC VARIABLES ; RPM1SV: .WORD 0 ;SAVE CONTENTS OF RPM1 HERE READBF: .BLKB READSZ ;BUFFER FOR READING 32. BLOCKS .END START