~~ I>~~~~~~~~~ q  q~~ .TITL DVINIT .NREL .TXTM 1 .ENT DKINIT,DKRLSE,ASTRT .EXTN CLEAR,MVWD,RDNBK .EXTN IDCB,FIDCB,DIVD,RDBNO .EXTN BFLUS,RDNBK,SETMOD,SDCB .EXTN CRINI,CFNAM,SUFT .EXTN DCTT,TTIL,TTOL,TTRL,TTOL,PTRL,PTPL,LPTL,CDRL,PLTL .EXTN ASBUF ; ; AC1: CODE (0= PARTIAL INIT,-1 = FULL INIT) ; AC2: DCB ADDRESS OF SYS.DR FILE (IS LINKED TO MAP.DR DCB) ; DKINIT: STA@ 3,CSP ;SAVE REUTRN SAVE  ;SAVE REGISTERS ISZ ORTN,3 LDA 0,DCBST,2 MOVL 0,0 MOVZR 0,0 STA 0,DCBST,2 COM# 1,1,SNR ;FULL OR PARTIAL JSR DVINIT ;FULL - REFLORATE DEVICE LDA 0,SYSD ;BLOCK ADDRESS OF SYS.DR JSR@ .IDCB JSR@ .RDNBK ;READ BLOCK ZERO MOV 1,3  ;BUFFER ADDRESS LDA 0,UFTBC+1,3 ;BYTE COUNT IN LAST BLOCK STA 0,SFBC,2 ;PUT IN DCB LDA 0,UFTBK+1,3 ;NUMBER OF LAST BLOCK STA 0,SFBK,2 ;... LDA 2,SFLK,2 ;DCB ADDRESS OF MAP.DR LDA 0,MAPD ;ADDRESS OF MAP.DR FIRST BLOCK STA 0,DCBFA,2 ;SET IN DCB LDA 0,UFDEL+UFTBC+1,3 STA 0,SFBC,2 LDA 0,UFDEL+UFTBK+1,3 STA 0,SFBK,2 RTRN DKRLSE: STA@ 3,CSP ;PUT DEVICE OUT OF SERVICE SAVE  ;SAVE REGISTERS JSR@ .BFLUS ;FLUSH BUFFERS TO DEVICE LDA 0,DCBST,2 MOVL 0,0 MOVOR 0,0 STA 0,DCBST,2 ISZ ORTN,3 RTRN .BFLUS: BFLUS .IDCB: IDCB .RDNBK: RDNBK .SDCB: SDCB .SETMOD: SETMOD SYSD: SCSYS MAPD: SCMAP .ASBUF: ASBUF ; ; ROUTINE TO INIT A DISK DEVICE OF ANY TYPE. ; ; ; AC2: DCB ADDRESS ; JSR DVINIT ; DVINIT: STA@ 3,CSP ;SAVE RETURN SAVE  ;SAVE REGISTERS LDA 0,SYSD ;SYS.DR DEVICE ADDRESS JSR@ .IDCB ;SETUP DCB JSR@ .ASBUF MOV 1,3 STA 0,BQCA,3 JSR@ .RDNBK ;READ BLOCK ZERO SUB 0,0 STA 0,DCBNA,2 ;CLEAR LINK ADDRESS STA 1,TMP,3 ;SAVE BUFFER ADDRESS MOV 1,2 LDA 0,BLKSZ ;BUFFER SIZE JSR@ .CLEAR ;CLEAR BUFFER LDA 2,TABL ;TABLE LENGTH LDA 0,TAB ;START ADDRESS JSR@ .MVWD ;MOVE WORDS INTO BUFFER LDA 2,OAC2,3 ;DCB ADDRESS LDA 0,SBC STA 0,SFBC,2 LDA 0,SBK STA 0,SFBK,2 LDA 2,DCBDC,2 ;DCT ADDRESS LDA 1,DCNBK,2 ;NUMBER OF BLOCKS ON DEVICE SUB 0,0 LDA 2,BTPBK ;BITS PER BLOCK JSR@ .DVD ;DIVIDE LDA 2,TMP,3 ;ADDRESS STA 1,UFDEL+UFTBK+1,2 ;BLOCK NUMBER OF LAST STA 1,TMP+1,3 ;SAVE FOR LATER FILE GROWING MOVZR 0,0 MOVZR 0,0 MOVZR 0,0 MOVZR 0,0 MOVZL 0,0 ;FULL WORDS STA 0,UFDEL+UFTBC+1,2 ;FULL WORD BYTE COUNT IN LAST BLOCK LDA 2,OAC2,3 ;DCB ADDRESS LDA 2,DCBDC,2 ;DCT ADDRESS - SEARCH FOR LINK LDA 0,DCDCL,2 ;DCT LINK FROM DCT LDA 2,TMP,3 ;BUFFER ADDRESS STA 0,UFTDL+1,2 ;SYS.DR DEVICE LINK STA 0,UFDEL+UFTDL+1,2 ;AND FOR MAP.DR JSR@ .SETMOD ;SET BUFFER MODIFIED LDA 0,MAPD LDA 2,OAC2,3 ;DCB ADDRESS LDA 2,SFLK,2 ;DCB ADDRESS OF MAP.DR JSR@ .IDCB ;INIT DCB JSR@ .ASBUF MOV 1,3 STA 0,BQCA,3 JSR@ .RDNBK ;READ BLOCK ZERO SUB 0,0 STA 0,DCBNA,2 ;DELETE LINK IF ANY MOV 1,2 LDA 0,BLKSZ ;WORDS PER BLOCK JSR@ .CLEAR ;CLEAR IT FOR MAP.DR BLOCK 0 LDA 0,C160K ;BLOCKS 0,1,2 ARE BUSY STA 0,0,2 JSR@ .SETMOD ;SET BUFFER MODIFIED LDA 2,.SDCB ;SDCB ADDRESS LDA 1,OAC2,3 ;INPUT DCB ADDRESS LDA 0,MAPD ;MAP.DR FIRST ADDRESS JSR@ .FIDCB ;INIT DCB LDA 0,TMP+1,3 ;LAST BLOCK NUMBER JSR@ .RDBNO ;READ IT LDA 0,FIRST ;FIRST PUSH SPACE ADDRESS CLOP: LDA 2,.SDCB ;SDCB ADDRESS LDA 1,OAC2,3 ;SYS.DR DCB ADDRESS JSR@ .FIDCB ;SETUP DCB JSR@ .ASBUF MOV 1,3 STA 0,BQCA,3 JSR@ .RDNBK ;READ BLOCK ZERO (PSUEDO-FILE) MOV 1,2  ;BUFFER ADDRESS LDA 3,NXOF ;OFFSET OF LINK ADD 1,3 SUB 1,1 STA 1,0,3 ;CLEAR LINK JSR@ .SETMOD ;MODIFIED STA 1,BQTLA,2 ;FREE BUFFER INC 0,0 LDA 1,LAST ;LAST ADDRESS PLUS ONE SUB# 0,1,SZR JMP CLOP JMP DV1X .FIDCB: FIDCB .RDBNO: RDBNO NXOF: BQNXL ; ; JUNK. ; BTPBK: SCWPB*20 .DVD: DIVD C160K: 177000  ;FIRST 7 BLOCKS BLKSZ: SCWPB+1 .CLEAR: CLEAR .MVWD: MVWD FIRST: SCSVB LAST: SCSVB+SCSNO .DCTT: DCTT ; ; DEVICE INIT TEMPLATE ; TAB: .+1 2  ;2 ENTRIES TO START "S*400+"Y "S*400 0 0 0 "D*400+"R ATPER+ATCHA+ATWP SBK: 0  ;LAST BLOCK NUMBER SBC: SCWPB*2  ;FULL BLOCK OF BYTES SCSYS  ;DEVICE ADDRESS FOR THIS -1  ;LINK "M*400+"A "P*400 0 0 0 "D*400+"R ATPER+ATCHA+ATWP -1  ;LAST BLOCK -1  ;BYTES IN LAST BLOCK SCMAP  ;DEVICE ADDRESS -1  ;LINK TABL: .-TAB-1 DV1X: LDA 2,SITAB IIDCL: STA 2,TMP,3 ;SAVE TABLE POINTER LDA 1,0,2 MOV# 1,1,SNR RTRN  ;ALL DONE LDA 1,1,2 ;DCT ADDRESS LDA 3,.DCTT ADD 1,3 LDA 1,0,3 ;REAL DCT ADDRESS COM# 1,1,SNR JMP NEXT LDA 0,0,2 ;NAME POINTER LDA 1,.XUFT ;DUMMY UFT JSR@ .CFNAM ;CONVERT NAME TO SYS FORMAT LDA 2,TMP,3 MOV 1,3 LDA 0,2,2 ;ATTRIBUTES STA 0,UFTAT,3 LDA 0,1,2 ;DEVICE LINK STA 0,UFTDL,3 SUB 0,0 STA 0,UFTBK,3 STA 0,UFTBC,3 STA 0,UFTAD,3 MOV 3,0 LDA 3,CSP LDA 2,OAC2,3 ;SYS.DR DCB ADDRESS JSR@ .CRT ;CRINI FILE JMP . NEXT: LDA 3,CSP LDA 2,TMP,3 INC 2,2 INC 2,2 INC 2,2 JMP IIDCL .CRT: CRINI .CFNAM: CFNAM ASTRT: .GADD DKINI,-1 .XUFT: SUFT SITAB: .+1  ;TABLE ADDRESS 2*STTI TTIL ATPER+ATWP+ATCHA 2*STTO TTOL ATPER+ATRP+ATCHA 2*STTR TTRL ATPER+ATWP+ATCHA 2*STTP TTOL ATPER+ATRP+ATCHA 2*SPTR PTRL ATPER+ATWP+ATCHA 2*SPTP PTPL ATPER+ATRP+ATCHA 2*SLPT LPTL ATPER+ATRP+ATCHA 2*SCDR CDRL ATPER+ATWP+ATCHA 2*SPLT PLTL ATPER+ATRP+ATCHA 0 STTI: .TXT /$TTI/ STTO: .TXT /$TTO/ STTR: .TXT /$TTR/ STTP: .TXT /$TTP/ SPTP: .TXT /$PTP/ SPTR: .TXT /$PTR/ SCDR: .TXT /$CDR/ SLPT: .TXT /$LPT/ SPLT: .TXT /$PLT/ .END *U*U*U*Uu{