.TITLE RPFIX .IDENT /MRHV01/ .SBTTL INTRO PAGE .LIST MEB ; ;THIS PROGRAM IS DESIGNED TO REWRITE SURFACES OF ;AN AMPEX DM980 DRIVE. IN ESSENCE IT WILL ; ;1 READ ONE SURFACE OF 32. BLOCKS ; ;2 WRITE THOSE BLOCKS BACK ; ;NOTE NOTE NOTE ; ; PROGRAM USES LUN 2 FOR READS, ASSIGN IT TO THE PROPER DISK BEFORE ; RUNNING PROGRAM 'REA ...RPC 2 DP2:' FOR EXAMPLE ; ;OPERATING PROCEEDURE ; ;MCR>RPF N,MMMMMM WHERE ; ; N=HIGH LOGICAL BLOCK NUMBER ; MMMMMM=LOW LOGICAL BLOCK NUMBER ; ; ;DEFINE SOME NEEDED VARIABLES ; READSZ=32.*1000 ;NUMBER OF BYTES IN 32. BLOCKS BLOCKH=1 BLOCKL=175720 ; ; .MCALL QIOW$,DIR$,EXIT$S,GMCR$ .PAGE .SBTTL THE CODE ; ;FIRST SET THINGS UP ; START: DIR$ #GETMCR ;GET MCR COMMAND LINE MOV #GETMCR+G.MCRB+4,R0 ;BUMP POINTER TO COMMAND PART JSR PC,$COTB ;CONVERT HIGH BLOCK NUMBER CMP R2,#', ;TERMINATED ON "," ? BNE SYNTER ;BR IF NOT MOV R1,REAQIO+Q.IOPL+6 ;FILL IN HIGH BLOCK NUMBER JSR PC,$COTB ;NOW CONVERT LOW BLOCK NUMBER CMP R2,#15 ;TERMINATED ON A CARRIAGE RETURN BEQ 1$ ;IT'S OK CMP R2,#33 ;OR AN ESCAPE BEQ 1$ ;THAT'S OK TOO JMP SYNTER ;ANYTHING ELSE IS AN ERROR 1$: MOV R1,REAQIO+Q.IOPL+10 ;FILL IN LOW BLOCK NUMBER TST REAQIO+Q.IOPL+6 ;CHECK HIGH BLOCK # BMI SYNTER ;CAN'T BE NEGATIVE CMP REAQIO+Q.IOPL+6,#BLOCKH ;OR BE TO BIG BGT SYNTER ;IF HIGH BLOCK NUMBER TO BIG, AN ERROR BLT 15$ ;IF LESS, DON'T CHECK LOW BLOCK NUMBER ;IF SAME, CHECK LOW BLOCK NUMBER CMP REAQIO+Q.IOPL+10,#BLOCKL ;IS LOW BLOCK NUMBER TO HIGH ? BHI SYNTER ;THAT'S AN ERROR TOO 15$: DIR$ #REAQIO ;ALL OK, DO DISK READ TSTB IOSB ;DID READ GO BPL 10$ ;BR IF OK MOV #READFA,ERRQIO+Q.IOPL ;ELSE REPORT ERROR MOV #READLN,ERRQIO+Q.IOPL+2 DIR$ #ERRQIO JMP EXIT 10$: MOV #IO.WLB,REAQIO+Q.IOFN ;CHANGE TO A WRITE DIR$ #REAQIO ;REWRITE IT TSTB IOSB ;DID WRITE GO ? BPL EXIT MOV #WRITFA,ERRQIO+Q.IOPL ;ELSE REPORT ERROR MOV #WRITLN,ERRQIO+Q.IOPL+2 DIR$ #ERRQIO EXIT: EXIT$S ;EXIT CPU ; SYNTER: ;SYNTAX OR BLOCK # ERROR MOV #SYNERR,ERRQIO+Q.IOPL ;REPORT ERROR MOV #SYNELN,ERRQIO+Q.IOPL+2 DIR$ #ERRQIO BR EXIT ;AND EXIT .PAGE .SBTTL DATA AREAS ; ;GET MCR DPB ; GETMCR: GMCR$ ; ; ;QIO FOR MESSAGES TO TI ; ERRQIO: QIOW$ IO.WVB,5,1,,,,<0,0,40> ; ;NOW POSSIBLE MESSAGES ; READFA: .ASCII /*** RPF FAILED TO READ 32. BLOCK SURFACE ***/ READLN=.-READFA .EVEN ; WRITFA: .ASCII /*** RPF FAILED TO WRITE 32. BLOCK SURFACE ***/ WRITLN=.-WRITFA .EVEN ; SYNERR: .ASCII /*** RPF SYNTAX OR BLOCK NUMBER ERROR ***/ SYNELN=.-SYNERR .EVEN ; ;NOW THE DISK READ QIO ; REAQIO: QIOW$ IO.RLB,2,1,,IOSB,, ; IOSB: .WORD 0,0 ;RETURNED STATUS ; ; ;MISC VARIABLES ; READBF: .BLKB READSZ ;BUFFER FOR READING 32. BLOCKS .END START