.TITLE TE -- TAPE ERASER .IDENT /V01.00/ $USRTO =: 50 ;USER TOP ADDRESS $ERRBY =: 52 ;USER ERROR BYTE $USRRB =: 53 ;USER ERROR BYTE FATAL$ =: 10 ;FATAL ERROR STATUS $JSX =: 4 ;EXTENDED JOB STATUS WORD VBGEX$ =: 200 ;ALLOW VBGEXE BIT ALL64$ =: 20 ;ALLOW 64KB USER SPACE SF.MWR =: 371 ;WRITE PHYSICAL BLOCK FUNCTION CR =: 15 ;CARIAGE RETURN EOL =: 200 ;END OF LINE (NO CRLF) BLKSZ =: 8192. ;BLOCK SIZE IN BYTES (0=MAX) .MCALL .EXIT,.FETCH,.LOOKUP,.PRINT,.SETTOP,.SPFUN .ASECT .=$JSX .WORD VBGEX$!ALL64$ ;ALLOW VBGEXE .PSECT START:: MOV @#$USRTO,R5 ;GET TOP ADDRESS TST (R5)+ ;POINT TO HANDLER/BUFFER SPACE MOV #DBLK,R2 ;POINT TO DEVICE NAME BLOCK .FETCH R5,R2 ;FETCH HANDLER BCC 20$ ;IF CC OK MOV #FLOAD,R1 ;SET ERROR MESSAGE 10$: CALL PRINT ;PRINT MESSAGE BISB #FATAL$,@#$USRRB ;SET FATAL ERROR STATUS 15$: .SETTOP #0 ;WE DON'T WANT SWAPPING ON EXIT CLR R0 ;ENFORCE HARD RESET .EXIT ;EXIT 20$: MOV R0,R5 ;POINT TO I/O BUFFER .LOOKUP #AREA,#0,#DBLK,#0 ;LOOKUP THE TAPE BCC 25$ ;IF CC OK MOV #FLOOK,R1 ;SET ERROR MESSAGE BR 10$ ;PRINT MESSAGE AND EXIT .IF EQ BLKSZ 25$: .SETTOP #-2 ;ALLOCATE I/O BUFFER .IFF 25$: MOV R5,R0 ; ADD #BLKSZ-2,R0 ; .ENDC SUB R5,R0 ;R0=BUFFER SIZE IN BYTES TST (R0)+ ; MOV R0,MTST ;SAVE IT FOR PRINTING ROR R0 ;R4=BUFFER SIZE IN WORDS MOV R0,R4 ; MOV #FBUFF,R1 ;PRINT BUFFER SIZE CALL PRINT ; ;R4 = BLOCK SIZE (W0RDS) ;R5 = BUFFER ADDRESS 30$: MOV #BLKN,MTST ;PRINT BLOCK NUMBER MOV #FBLKN,R1 ; CALL PRINT ; .SPFUN #AREA,#0,#SF.MWR,R5,R4,#MTST ;WRITE THE BLOCK BCS 40$ ;IF CS ERROR ADD #1,BLKN+2 ;UPDATE BLOCK NUMBER ADC BLKN ; BR 30$ ;TO NEXT BLOCK 40$: MOV #FWRIT,R1 ;PRINT ERROR MESSAGE BR 10$ ;AND EXIT PRINT:: JSR R2,$SAVVR ;SAVE R0-R2 MOV #LNBUF,R0 ;POINT TO LINE BUFFER CALL $EDMSG ;EDIT MESSAGE CLRB @R0 ;MAKE IT ASCIZ .PRINT #LNBUF ;PRINT IT RETURN ;RETURN DBLK: .RAD50 /TAP / ;DEVICE SPECIFICATION .BLKW ;PAD MTST: .BLKW 4 ;MAGTAPE STATUS AREA: .BLKW 6 ;EMT AREA BLKN: .WORD 0,0 ;TAPE BLOCK NUMBER LNBUF: .BLKB 81. ;LINE BUFFER FLOAD: .ASCIZ /?TE-F-Unable to fetch handler - %X/ FLOOK: .ASCIZ /?TE-F-Failed to lookup device - %X/ FBUFF: .ASCIZ /?TE-I-Erasing %X block size %M bytes/ FBLKN: .ASCIZ /?TE-I-Erasing %X block # %T/ FWRIT: .ASCIZ /%N?TE-F-Erasing %X error code %D/ .END START