ASMB,R,L,C,Z
      HED (FMGR) CR.LU: CONVERT -LU/+CRN INTO +LU 
*     NAME:   CR.LU 
*     SOURCE: 92071-18056 
*     RELOC:  92071-16056 
*     PGMR:   M.L.K.
*     MOD:    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 CR.LU,7 92071-1X056 REV.2041 800421 
* 
      ENT CR.LU 
* 
      EXT .ENTR, .XLA 
      IFZ           *** L/20 CODE *** 
      EXT $CDA, $CD#, $CDSZ 
      XIF 
      IFN           *** L/10 CODE *** 
      EXT $CDIR, $MDSP
      XIF 
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     THIS ROUTINE IS USED TO CONVERT A NEGATIVE LU OR A
*     POSITIVE CRN INTO THE CORRESPONDING DISC LU.  IF THE
*     REQUESTED LU OR CRN IS NOT FOUND, A=0 AND E=1 (FRETURN).
* 
*     CALLING SEQUENCE: 
* 
*     LU = CR.LU(CRNLU,LUN,LTRAK,CRN,LWORD) 
* 
*     WHERE:
* 
*     CRNLU IS THE NEGATIVE LU NUMBER OR POSITIVE CRN 
* 
*     LU    WILL BE THE POSITIVE LU NUMBER
* 
*     LUN   WILL BE THE POSITIVE LOGICAL UNIT NUMBER
* 
*     LTRAK WILL BE THE LAST TRACK USED ON CARTRIDGE
* 
*     CRN   WILL BE THE POSITIVE CARTRIDGE REFERENCE NUMBER 
* 
*     LWORD WILL BE THE LOCK WORD OF THE CARTRIDGE
* 
*     SPECIAL ASSEMBLY INSTRUCTIONS:
*     THIS FILE CONTAINS SOURCE CODE FOR BOTH THE RTE-L AND RTE-L/20
*     CR.LU ROUTINES. ASSEMBLY THE CODE WITH THE N OPTION TO CREATE 
*     THE RTE-L VERSION, AND WITH THE Z OPTION TO CREATE THE
*     RTE-L/20 VERSION. 
      SKP 
* 
*     ENTRY 
* 
CR.LU NOP 
      LDA DFDM      GET DUMMY ADDRESS 
      STA LU
      STA LTRAK 
      STA CRN 
      STA LWORD 
      LDA CR.LU 
      STA DR.LU 
      JMP DR.LU+1 
* 
CRNLU NOP 
LU    DEF DUM 
LTRAK DEF DUM 
CRN   DEF DUM 
LWORD DEF DUM 
* 
DR.LU NOP 
      JSB .ENTR     SET UP PARAMETERS 
      DEF CRNLU 
* 
*     PROCESS REQUEST 
* 
      IFN           *** L/10 CODE *** 
      LDA $CDA      GET CARTRIDGE DIRECTORY START ADDRESS 
      CMA,INA        SUBTRACT FROM
      ADA $MDSP       CARTRIDGE DIRECTORY END ADDRESS 
      CLB              CLEAR FOR DIVIDE 
      DIV $CDSZ         DIVIDE BY ENTRY SIZE
      STA $CD#           SAVE NUMBER OF ENTRIES 
      XIF 
* 
      LDA CRNLU,I   GET CRN OR LU 
      CLB            DEFAULT OFFSET TO ZERO (FOR LU)
      SSA           IF GIVEN LU 
      CMA,INA,RSS    THEN SET POSITIVE AND USE DEFAULT OFFSET 
      LDB N2         ELSE USE OFFSET
      STB OFSET     SAVE OFFSET FOR LATER 
* 
      CMB,INB       NEGATE FOR PROPER OFFSET
      STA CRNLU     SAVE LU OR CRN
      CCE,SZA,RSS   IF ZERO LU
      JMP ZFOUN      THEN TAKE FAILURE EXIT 
* 
      JSB .XLA      GET CARTRIDGE DIRECTORY ADDRESS 
      DEF $CDA+0
      ADB A         ADD OFFSET
* 
LOOP  JSB .XLA       GET LU OR CRN
      DEF B,I 
      SZA,RSS       END OF LIST?
      JMP DR.LU,I   YES, EXIT NOT FOUND 
* 
      CPA CRNLU     THIS THE ONE WE'RE LOOKING FOR? 
      JMP FOUND     YES, GO GET LU
      JSB .XLA
      DEF $CDSZ+0 
      ADB A         NO, TRY NEXT ONE
      JMP LOOP
      SKP 
* 
*     SET VARIABLES FOR FOUND CARTRIDGE 
* 
FOUND ADB OFSET     BACK UP IF NECESSARY
* 
      JSB .XLA      GET LOGICAL UNIT NUMBER 
      DEF B,I 
      STA LU,I      SAVE IT 
      STA OFSET      SAVE FOR RETURN
* 
      INB 
      JSB .XLA      GET LAST TRACK
      DEF B,I 
      STA LTRAK,I   SAVE IT 
* 
      INB 
      JSB .XLA      GET CARTRIDGE REFERENCE NUMBER
      DEF B,I 
      STA CRN,I     SAVE IT 
* 
      INB 
      JSB .XLA      GET LOCK WORD 
      DEF B,I 
      STA LWORD,I   SAVE IT 
* 
      LDA OFSET     GET LU FOR RETURN 
      CLE           SET FOR SUCCESSFUL EXIT (SPL) 
* 
ZFOUN JMP DR.LU,I     AND EXIT
      SKP 
* 
*     STORAGE 
* 
N2    DEC -2
* 
DFDM  DEF DUM 
* 
OFSET NOP 
DUM   NOP 
* 
      IFN           *** L/10 CODE *** 
$CDA  DEF $CDIR+0 
$CDSZ DEC 4 
$CD#  NOP 
      XIF 
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
