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