~~ I>~~~~~~~~v v q~~~~~~ ; ; ROUTINE TO READ/WRITE A NUMBER OF BLOCKS FROM ; CORE TO ABSOLUTE DISK(FH ONLY) ADDRESS ; IN CONSECUTIVE ORDER. ; ; AC0: CORE ADDRESS ; AC1: DEVICE ADDRESS (INITIAL) ; AC2: NUMBER OF BLOCKS ; JSR RDB(WRB) ; -ERROR RETURNS ARE TAKEN THROUGH SYSER ; .TITL RWBLK .NREL .ENT RDB,WRB .EXTN WAIT,SDCB,SUFT,SYSER,DSKDC RDB: MOVO 0,0,SKP ;SET READ SWITCH WRB: MOVZ 0,0 ;SET WRITE SWITCH INC 3,3  ;NORMAL RETURN STA@ 3,CSP ;SAVE RETURN SAVE  ;SAVE REGISTERS LDA@ 0,.UST0 ;LOAD REGISTERS FROM USER STATUS AREA LDA@ 2,.UST2 ;... MOV# 2,2,SNR ;NO BLOCKS ? RTRN  ;YES. LDA 3,.SUFT ;USE SUFT AREA FOR TEMP BUFFER Q STA 1,UFTBK,3 ;FONEY DEVICE ADDRESS DISPLACEMENT LDA 1,BQL ;BUFFER Q HEADER LENGTH ADD 1,3  ;BQ ADDRESS NOW STA 0,BQNXT,3 ;CORE ADDRESS LDA 1,ISTAT ;RANDOM INITIAL STATUS STA 1,BQST,3 ;SET IN BQ HEADER LDA 1,.SDCB ;SDCB ADDRESS STA 1,BQDCB,3 ;PLACE FOR ERRORS SUBC 1,1 ;CLEAR AC1,LEAVE CARRY STA 1,BQUN,3 ;UNIT ZERO STA 2,BQTLA,3 ;USE TLA FOR BLOCKS COUNTER MOV 3,2  ;BQ ADDRESS TO AC2 MOVR 1,1 ;SAVE CARRY IN AC1 DKLP: LDA 3,DKDC ;DSKDC ADDRESS MOVL# 1,1,SZC ;READ OR WRITE JMP .DIN ;DO INPUT JSR@ DCSTO,3 ;START WRITING INCOM: JSR@ .WAIT ;WAIT FOR COMPLETION JMP ERR  ;ERROR RECOVERY LDA 3,BLKSZ ;BLOCK SIZE ADD 3,0  ;NEW CORE ADDRESS STA 0,BQNXT,2 ;SAVE ISZ BQCA,2 ;BUMP DEVICE ADDRESS DSZ BQTLA,2 ;DONE ? JMP DKLP ;NO GO BACK RTRN  ;SCRAM .DIN: JSR@ DCSTI,3 JMP INCOM DKDC: DSKDC .WAIT: WAIT ISTAT: QTIND .SDCB: SDCB .SUFT: SUFT BQL: -BQTLA BLKSZ: 400 .UST0: UST+USTA0 .UST2: UST+USTA2 .SYSER: SYSER ERR: JSR@ .SYSER ERFIL .END *U*U*U*U!}