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 
                                                              