ASMB,R,L,C * NAME: MCDC. * SOURCE: 92070-18025 * RELOC: 92070-16025 * PGMR: G.L.M. * MOD: M.L.K. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 92070-1X025 REV.1941 790906 * * ENT MC..,DC.. EXT EXEC,.ENTR,CLD.R,.P1,.P2,.P3,.P4,.P5 EXT DS.F1,DS.DF,.P6,.P7,.R1,SY.TR,PR.IT EXT GTOPN,O.BUF,MSS.,.R2,TR.SC * * 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 IOR B7700 ADD IN DISC PROTECT BITS STA PLU SAVE FOR DISC EXEC CALLS * LDA LU GET LU AGAIN SSA IS IT POSITIVE? JMP BADLU NO, BAD LU ADA N64 IS IT LESS THAN 64? SSA,RSS YES, GOOD LU, PROCESS IT JMP BADLU NO, ILLEGAL LU * LDA LIS ADA .4 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.RTR) 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 DVT6 CONTAINS DEVICE TYPE DEF IFT6 STRTN JMP BADLU IF LU IS UNDEFINED, EXIT LDA DVT6 GET DEVICE TYPE ALF,ALF POSITION TO LOW BITS AND B77 ISOLATE DEVICE TYPE ADA BN30 IS IT LESS SSA THAN 30 (DEVICE TYPES OCTAL)? JMP BADLU NOT DISC! ADA N8 IS IT GREATER SSA,RSS THAN 37? JMP BADLU NOT DISC EITHER * JSB TR.SC CALL FOR NUMBER OF TRACKS DEF *+4 DEF LU DISC LU DEF TRACK NUMBER OF TRACKS DEF IFT6 DUMMY SZA LEGAL LU? JMP BADLU NO, EXIT LDB TRACK GET NUMBER OF TRACKS ADB N1 SUBTRACT 1 FOR LAST TRACK ADRS * * IF LAST TRACK NOT GIVEN, USE MAX LAST TRACK * LDA LSTRK,I PASSED LAST TRACK SZA,RSS IF ZERO JMP LAST USE MAX LAST TRACK * * LAST TRACK CANNOT BE > MAX LAST TRACK * CMA,INA SET PASSED LAST TRACK NEGATIVE ADB A SUBTRACT FROM MAX LDA .56 PRESET WITH "BAD PARAMETER" ERROR CODE SSB IS PASSED VALUE GREATER? JMP EXMC YES, LAST TRACK IS > MAX, ERROR LDB LSTRK,I GET PASSED VALUE AGAIN LAST LDA .55 PRESET WITH "MISSING PARAMETER" ERROR CODE SZB,RSS PASSED VALUE ZERO? JMP EXMC YES, ERROR LDA N1024 CHECK NUMBER OF TRACKS > 1024 ADA B SSA,RSS TOO LARGE? JMP EX33 YES, ERROR 33 STB TRACK VALUE OK, USE IT * * SET UP DIRECTORY MANAGER CALL TO MOUNT AND LOCK * STUP LDA .7 P1=7 STA .P1 LDA LU P2=-LU STA .P3 CMA,INA P3=LU STA .P2 LDA TRACK P4=LAST TRACK STA .P4 JSB RD16 GO READ CART HEAD FOR CRN LDA DBF3 P5=DISC REFERENCE STA .P5 JSB GTOPN GO GET OPEN FLAG DEF *+1 STA .P6 SET PARAMETER 6 LDB N2 SUBFUNCTION CODE = MOUNT STB .P7 SET PARAMETER 7 JSB CLD.R GOTO DIRECTORY MANAGER LDA .R1 GET ERROR RETURN SZA ANY ERRORS? JMP EXMC YES, EXIT * * CALL D.RTR TO UNLOCK AND VALIDATE DISC * LDA .5 REQUEST UNLOCK (NOTE, DISC LU SET STA .P1 IN PREVIOUS CALL) JSB CLD.R CALL FOR UNLOCK LDA .R1 GET ERROR FOR RETURN * EXMC STA ER,I CLA STA DS.DF STA DS.F1 FORCE NEW READ OF MASTER DIRECTORY JMP MC..,I SKP * EX50 LDA .50 JMP EXMC EX33 LDA .33 JMP EXMC * BADLU LDA N18 JMP EXMC * RD16 NOP READ THE CARTRIDGE HEADER JSB EXEC DEF R16X DEF X.1 DEF PLU DEF DBUF DEF .16 DEF TRACK DEF ZERO R16X JMP BADLU ERROR, ASSUME ITS A BAD LU LDA N1 PRESET FOR DISC ERROR CPB .16 CHECK XMISSION LOG, GET 16 WORDS? JMP RD16,I YES, RETURN JMP EXMC NO, DISC ERROR * STCOD OCT 100015 DVT6 NOP IFT6 NOP TRACK NOP NUMBER OF TRACKS LU NOP ZERO NOP PLU NOP DISC LU WITH PROTECT BITS CNT NOP COUNT OF ACTIVE FILES FOR DISMOUNT * X.1 OCT 100001 .4 DEC 4 .16 DEC 16 N64 DEC -64 N8 DEC -8 N2 DEC -2 N1 DEC -1 .3 DEC 3 .5 DEC 5 .7 DEC 7 .33 DEC 33 .2038 DEC 2038 N18 DEC -18 BN30 OCT -30 B77 OCT 77 N103 DEC -103 N1024 DEC -1024 .50 DEC 50 .55 DEC 55 .56 DEC 56 .128 DEC 128 B7700 OCT 7700 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 SKP * 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 DC.. NOP JSB .ENTR DEF NN * ISZ NLIS ADVANCE TO DRN PARAMETER LDA NLIS,I FETCH IT SZA,RSS MUST BE GIVEN JMP EXD55 ELSE ERROR EXIT * * STA .P2 SAVE DRN FOR D.RTR LDA .3 SET FUNCTION CODE STA .P1 FOR DISC LOCK JSB CLD.R GOTO CLD.R LDA .R1 FETCH ERROR CODE CPA N103 CORRUPT DIRECTORY? JMP TYPE6 YES, ALLOW HIM TO DISMOUNT IT SZA JMP EXDC ERROR EXIT * * TEST FOR SYSTEM USAGE OF THIS DISC * TYPE6 JSB SY.TR CALL SY.TR FOR PROGRAM AND SWAP AREA DEF *+6 DEF .P2 DISC ID DEF O.BUF BUFFER FOR PROGRAM NAMES DEF .128 SIZE OF BUFFER DEF IFT6 \ TWO DUMMY PARAMETERS DEF TRACK / STA CNT SAVE THE ACTIVE FILE COUNT SZA,RSS IF NO ERROR JMP DCIT GO DISMOUNT THE CARTRIDGE * JSB MSS. GO PRINT ERROR DEF *+2 DEF .2038 SYSTEM USING DISC * JSB PR.IT PRINT LIST OF CONFLICTING PROGRAMS DEF *+3 DEF O.BUF DEF .128 * * DISC IS LOCKED SO NO OPEN FILES EXIST * SET UP DISMOUNT CALL TO DIRECTORY MANAGER * DCIT LDA .7 SET FUNCTION CODE STA .P1 FOR DIRECTORY MODIFICATION LDA NLIS,I GET THE LU/CRN AGAIN STA .P2 STORE INTO D.RTR CALL PARAMETERS CLB SET P3=0 & SUBFUNCTION P7 STB .P3 =0 FOR DISMOUNT STB .P7 SUBFUNCTION = 0 FOR DISMOUNT JSB CLD.R LDA .R1 FETCH ERROR CODE SZA ANY ERRORS? JMP EXDC ERROR, DIDN'T DISMOUNT LDA CNT GET NUMBER OF ACTIVE FILES SZA,RSS ANY? JMP EXNOW NONE, EXIT * LDA .R2 GET TRACK/LU WORD FROM D.RTR AND B77 ISOLATE LU CMA,INA SET IT NEGATIVE STA NLIS,I AND SAVE IT LDA NLIS GET ADDRESS OF PARAMETERS ADA N1 SUBTRACT ONE TO POINT AT TYPE STA NLIS AND SAVE FOR CALL TO MC.. CLA,INA SET 1 INTO PARAMETER STA NLIS,I TYPE FOR CALL TO MC.. JSB MC.. RE-MOUNT CARTRIDGE IF ACTIVE FILES ON IT DEF *+4 DEF NN,I DEF NLIS,I DEF NER,I JMP EXNOW SKIP ERROR SET EXDC STA NER,I STORE ERROR CODE INTO USER'S ERROR LDA .5 SET UP FOR UNLOCK STA .P1 JUST IN CASE STILL LOCKED LDA NLIS,I GET LU/CRN AGAIN STA .P2 JUST IN CASE JSB CLD.R UNLOCK THE DISC (IGNORE ERROR) EXNOW CLA STA DS.DF STA DS.F1 FORCE A NEW READ OF DISC DIRECTORY JMP DC..,I * * EXD55 LDA .55 JMP EXDC * LSTRK EQU NN * END