ASMB,R,L,C
      HED (FMP) CRMC: MOUNT DISC CARTRIDGE
*     NAME:   CRMC
*     SOURCE: 92071-18183 
*     RELOC:  92071-16183 
*     PGMR:   E.D.B.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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 CRMC,7 92071-1X183 REV.2041 800806
* 
      ENT CRMC
* 
      EXT CLD.R, .P1, .P2, .P3, .P4, .P7, .R1 
      EXT EXEC, .ENTR 
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     THIS ROUTINE MOUNTS A DISC CARTRIDGE TO AN RTE-L SYSTEM 
* 
*     CALLING SEQUENCE: 
* 
*     CALL CRMC(LU,LSTRK) 
* 
*     WHERE:
* 
*     LU     IS THE +/- LOGICAL UNIT NUMBER OF THE DISC CARTRIDGE 
*            TO BE MOUNTED.  MUST BE IN RANGE 1 - 64. 
* 
*     LSTRK  IS THE LAST TRACK TO BE AVAILABLE TO FMP (OPTIONAL)
*            MUST BE IN RANGE 0 - 1023. 
* 
*     POSSIBLE ERRORS:
* 
*       0  NO ERROR 
*     -10  NOT ENOUGH PARAMETERS
*     -18  ILLEGAL LU 
*      33  DISC HAS MORE THAN 1024 TRACKS 
*      56  BAD PARAMETER
      SKP 
* 
*     ENTRY 
* 
CRMC  NOP 
      LDA DZERO 
      STA LU
      STA LSTRK 
      LDA CRMC
      STA DRMC
      JMP DRMC+1
* 
LU    DEF ZERO
LSTRK DEF ZERO
* 
DRMC  NOP           MOUNT CARTRIDGE ENTRY POINT 
      JSB .ENTR 
      DEF LU
* 
      LDA LU        IF NOT ENOUGH 
      CPA DZERO      PARAMETERS,
      JMP ER10        THEN TAKE ERROR EXIT
* 
*     PROCESS REQUEST 
* 
      LDA LU,I      FETCH CARTRIDGE IDENTIFIER
      SSA,RSS       IF CARTRIDGE ID POSITIVE, 
      CMA,INA        THEN NEGATE
* 
      SSA,RSS       IF NOT NEGATIVE,
      JMP ER18       THEN TAKE ERROR EXIT 
* 
      STA B         SAVE FOR TEST 
      ADB .63       TEST UPPER LIMIT
      SSB           IF NOT LESS THAN 64,
      JMP ER18       THEN TAKE ERROR EXIT 
* 
      STA LU        SAVE LU FOR D.RTR 
* 
      CMA,INA       MAKE LU POSITIVE
      IOR B10K       SET Z-BIT
      STA ZLU         AND SAVE FOR EXEC 
* 
      JSB EXEC      GET STATUS ON LU
      DEF *+7        TO DETERMINE DRIVER TYPE 
      DEF NAB15       (100015B) 
      DEF ZLU 
      DEF DVT6      CONTAINS DEVICE TYPE
      DEF IFT6
      DEF BUF 
      DEF .7
      JMP ER18      IF LU IS UNDEFINED, EXIT
* 
      LDA DVT6      GET DEVICE STATUS WORD
      ALF,ALF        POSITION DEVICE TYPE IN LOW BITS 
      AND B77         AND ISOLATE 
* 
      ADA NB30      CHECK IF DISC 
      SSA           IF LESS THAN 30B, 
      JMP ER18       THEN TAKE ERROR EXIT (NOT DISC)
* 
      ADA N8        CHECK IF DISC 
      SSA,RSS       IF GREATER THAN 37B,
      JMP ER18       THEN TAKE ERROR EXIT (NOT DISC)
* 
*     DETERMINE LAST AVAILABLE TRACK
* 
      LDB TRACK     GET NUMBER OF TRACKS
      ADB N1         AND SUBTRACT 1 FOR LAST TRACK ADRS 
* 
      LDA LSTRK,I   GET PASSED LAST TRACK 
      SZA,RSS       IF NOT SUPPLIED (OR ZERO),
      JMP LAST       USE MAX LAST TRACK 
* 
      SSA           IF NEGATIVE,
      JMP ER56       THEN TAKE ERROR EXIT 
* 
      CMA,INA       SUBTRACT
      ADB A          FROM MAX 
      SSB           IF PASSED VALUE GREATER THAN MAX
      JMP ER56       THEN TAKE ERROR EXIT 
* 
      LDB LSTRK,I    ELSE USE PASSED VALUE
* 
LAST  LDA N1024     CHECK NUMBER OF TRACKS > 1024 
      ADA B 
      SSA,RSS       IF MORE THAN 1024 TRACKS, 
      JMP ER33       THEN TAKE ERROR EXIT 
      SKP 
* 
*  SET UP DIRECTORY MANAGER CALL TO MOUNT AND LOCK
* 
      LDA .7        P1=7
      STA .P1 
* 
      LDA LU        P2=-LU
      STA .P2 
* 
      CMA,INA       P2=+LU
      STA .P3 
* 
      STB .P4       P4=LAST TRACK 
* 
      LDA N2        P7=MOUNT REQUEST
      STA .P7 
* 
      JSB CLD.R     CALL D.RTR
* 
      LDA .R1       GET ERROR RETURN CODE 
      SZA           IF ANY ERRORS,
      JMP EREX       THEN TAKE ERROR 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
      JMP EREX       AND EXIT 
      SKP 
* 
*     EXIT
* 
ER10  LDA N10       NOT ENOUGH PARAMETERS 
      JMP EREX
* 
ER18  LDA N18       ILLEGAL LU
      JMP EREX
* 
ER33  LDA .33       TOO MANY TRACKS ON DISC 
      JMP EREX
* 
ER56  LDA .56       ILLEGAL PARAMETER 
* 
EREX  JMP DRMC,I
      SKP 
* 
*     STORAGE AREA
* 
ZERO  NOP 
* 
N1024 DEC -1024 
N18   DEC -18 
N10   DEC -10 
N8    DEC -8
N2    DEC -2
N1    DEC -1
* 
.5    DEC 5 
.7    DEC 7 
.33   DEC 33
.56   DEC 56
.63   DEC 63
* 
NB30  OCT -30 
* 
B77   OCT 77
B10K  OCT 10000 
* 
NAB15 OCT 100015
* 
DZERO DEF ZERO
* 
ZLU   NOP           +LU WITH Z-BIT SET  
DVT6  NOP           DEVICE STATUS WORD
IFT6  NOP           INTERFACE STATUS WORD 
* 
BUF   NOP           - BUFFER FOR STATUS REQUEST 
      NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           ! 
TRACK NOP           ! NUMBER OF TRACKS
      NOP           - 
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
                                                                                                                                                                            