ASMB,R,L,C * NAME: MCDC. * SOURCE: 92064-18234 * RELOC: 92064-16055 * PGMR: G.L.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM MCDC.,7 92064-16055 REV.1805 771128B * * ENT MC..,RC.. EXT EXEC,.ENTR,CLD.R,.P1,.P2,.P3,.P4,.P5 EXT DS.F1,DS.DF,DS.LU,D.LB,D.LT USED BY FM.UT EXT IMESS,FID.,CONV. * * MOUNT/DISMOUNT SUBROUTINE * * N NOP LIS NOP ER NOP MC.. NOP JSB .ENTR DEF N ISZ LIS LDA LIS,I FETCH FIRST PARAMETER SZA,RSS MUST NOT BE ZERO JMP EX50 ELSE, RETURN ERROR=50 * SSA CMA,INA ALLOW NEG NUMBERS STA LU * LDA LIS ADA D4 ADVANCE TO LAST TRACK PARAMETER STA LSTRK SAVE IT * MOUNT CARTRIDGE SUBROUTINE * THIS ROUTINE PERFORMS THE FOLLOWING: * -CHECK DRIVER TYPE (MUST BE DISC) * -DETERMINE MAX LAST TRACK * -DOES VALIDITY CHECK ON DISK * PASSES CONTROL TO DIRECTORY MANAGER (D.RFP) WHO THEN: * -FINDS DIRECTORY SPACE * -CHECKS FOR DUPLICATE DRN OR LU * -WRITES DIRECTORY ENTRY IN MEMORY RESIDENT LIBRARY (%TBLFP) * JSB EXEC GET STATUS ON LU DEF STRTN TO DETERMINE DRIVER TYPE DEF STCOD (100015B) DEF LU DEF EQT5 STRTN JMP BADLU IF LU IS UNDEFINED, EXIT LDA EQT5 AND DTYPE (36000B) CPA DISC (14000B) JMP GDLU BADLU LDA N18 JMP EXMC * CHECK FOR DVR30, IF SO, SKIP THIS SECTION GDLU LDA EQT5 AND TFLD TYPE CODE FIELD (37400B) CPA DISC TYPE 30 ? JMP DVR30 YES LDA D9999 STA TRACK REQUEST READ FROM TRACK 9999 JSB RD16 RETURNS ACTUAL LAST TRACK IN B CCA ADB A * IF LAST TRACK NOT GIVEN, USE MAX LAST TRACK LDA LSTRK,I PASSED LAST TRACK SZA,RSS IF ZERO JMP DVR30+1 USE MAX LAST TRACK * LAST TRACK CANNOT BE > MAX LAST TRACK CMA,INA ADB A SUBTRACT FROM MAX LDA D56 SSB JMP EXMC (LAST TRACK IS > MAX) DVR30 LDB LSTRK,I LDA D55 SZB,RSS JMP EXMC STB TRACK * READ CARTRIDGE DIRECTORY JSB RD16 READ SECTOR 0 OF DIRECTORY TRACK * DO VALIDITY CHECK ON DIRECTORY * LDA DBUF FIRST WORD SSA,RSS MUST HAVE SIGN SET JMP NOINT (NOT INITIALIZED) LDA DBF3 WORD 3 (DRN) MUST BE POS NON-ZERO SSA,RSS SZA,RSS JMP NOINT LDA DBF8 WORD 8(# OF DIRECTORY TRACKS MUST BE NEG) SSA,RSS JMP NOINT LDA DBF7 FETCH LOWEST DIRECTORY TRACK CMA,INA SET IT NEG ADA DBF4 FIRST AVAIL. MUST BE < DIRECT. SSA,RSS JMP NOINT LDB DBF9 NEXT AVAIL. FMP TRACK SSB MUST BE A POSITIVE VALUE JMP NOINT CMB,INB ADB DBF7 AND--MUST BE LESS THAN OR EQUAL SSB TO LOWEST DIRECTORY TRACK JMP NOINT CLA STA NLIS CLEAR LOCK WORD * * IT IS OK!, SET UP DIRECTORY MANAGER CALL STUP LDA D7 P1=7 STA .P1 LDA LU P2=-LU STA .P3 CMA,INA P3=LU STA .P2 LDA TRACK P4=LAST TRACK STA .P4 LDA DBF3 P5=DISC REFERENCE STA .P5 LDA NLIS SET PARM #6 LDB N2 SET PARM #7 JSB CLD.R GOTO DIRECTORY MANAGER * FETCH ERROR RETURN LDA B,I (B IS POINTING TO ERROR) EXMC STA ER,I CLA STA DS.DF STA DS.F1 FORCE NEW READ OF MASTER DIRECTORY JMP MC..,I * * * DISC WAS NOT INITIALIZED SO LOCK TO FMGR * NOINT LDA XEQT SET THIS PROG AS LOCKER (FMGR) STA NLIS SET AS LOCK PARM CLA CLEAR STA DBF3 LABEL IF NOT INIT JMP STUP CONTINUE * * EX50 LDA D50 JMP EXMC * * RD16 NOP READ A BLOCK JSB EXEC DEF R16X DEF .1 DEF LU DEF DBUF DEF .16 DEF TRACK DEF ZERO R16X JMP RD16,I * STCOD OCT 100015 EQT5 EQU N LU NOP TRACK NOP ZERO NOP * XEQT EQU 1717B * .1 DEC 1 .16 DEC 16 DTYPE OCT 36000 DISC OCT 14000 TFLD OCT 37400 DBUF BSS 16 DBF3 EQU DBUF+3 DBF4 EQU DBUF+4 DBF7 EQU DBUF+7 DBF8 EQU DBUF+8 DBF9 EQU DBUF+9 * A EQU 0 B EQU 1 * DISM - DISMOUNT SUBROUTINE PERFORMS THE FOLLOWING* * CALLS THE DIRECTORY MANAGER TO PLACE A LOCK ON THE * REQUESTED DISC - THIS ASSURES THAT NO ACTIVE OPEN * FILES EXIST ON THE DISC. * * CALLS THE DIRECTORY MANGER TO CLEAR THE DIRECTORY * ENTRY FOR THE DISC & CLOSE UP ANY GAPS IN THE * DIRECTORY CAUSED BY THE DISMOUNT. * * NN NOP NLIS NOP NER NOP RC.. NOP JSB .ENTR DEF NN * ISZ NLIS ADVANCE TO DRN PARAMETER LDB NLIS,I FETCH IT LDA D55 PRE-FETCH ERROR CODE SZB,RSS -LU OR +DRN MUST BE GIVEN JMP EXDC ELSE ERROR EXIT STB .P2 SAVE DRN/LU FOR D.RFP * * CALL FID. TO VERIFY THAT THE DISC IS MOUNTED AND HAS * BEEN INITIALIZED. * JSB FID. DEF *+2 DEF NLIS,I -LU OR DRN * SZA OK? JMP MONT? NO-EITHER NOT MOUNTED OR NO DIRECTORY * * THE DISC IS MOUNTED AND IT HAS A DIRECTORY * * * LDA D3 SET FUNCTION CODE STA .P1 FOR DISC LOCK JSB CLD.R GOTO CLD.R LDA B,I FETCH ERROR CODE SZA JMP EXDC ERROR EXIT * DISC IS LOCKED SO NO OPEN FILES EXIST * SET UP DISMOUNT CALL TO DIRECTORY MANAGER * (IF NOT LOCKED, THEN NO DIRECTORY EXISTS) * * OK2 LDA D7 SET FUNCTION CODE STA .P1 FOR DIRECTORY MODIFICATION * * .P2 STILL CONTAINS THE -LU/DRN * CLB SET P3=0 & SUBFUNCTION (P7 WHICH STB .P3 IS PASSED VIA B) =0 FOR DISMOUNT JSB CLD.R LDA B,I FETCH ERROR CODE STA NER,I PASS IT BACK TO FMGR * * THE CALL TO FID. CAUSED THE LAST TRACK OF THE DISC TO BE SAVED * IN THE GLOBAL "D.LT". CONVERT AND PRINT IT. * JSB CONV. DEF *+4 DEF D.LT,I DEF MS DEF D4 * JSB IMESS ISSUE MESSAGE TO LOG DEF *+4 DEF D2 DEF MSS DEF D8 * JMP BYE * * * * IF MOUNTED, THE CALL TO FID. CAUSED THE GLOBALS DS.LU (DISC LU) * AND D.LB (DISC LABEL) TO THE SPECIFIED VALUES FOR THE DISC * * TO PROVE THAT THE DISC IS MOUNTED, THE LU/DRN PASSED MUST * MATCH ONE OF THE ABOVE GLOBALS. * MONT? LDA D54 PRE-FETCH ERROR CODE LDB NLIS,I FETCH THE PASSED -LU/DRN SSB WHAT WAS IT? JMP WLU IT WAS AN LU * CPB D.LB,I IT WAS A LABEL,IS IT MOUNTED? JMP OK2 YEP--GO DO DISMOUNT JMP EXDC * WLU CMB,INB SET LU POS CPB DS.LU,I IS IT MOUNTED? JMP OK2 YEP--CONTINUE EXDC STA NER,I BYE CLA STA DS.DF STA DS.F1 FORCE A NEW READ OF DISC DIRECTORY JMP RC..,I * * * LSTRK EQU NN MSS ASC 7,LAST TRACK MS NOP * N2 OCT -2 N18 DEC -18 D2 DEC 2 D3 DEC 3 D8 DEC 8 D6 DEC 6 D7 DEC 7 D4 DEC 4 D50 DEC 50 D54 DEC 54 D55 DEC 55 D56 DEC 56 D9999 DEC 9999 END