ASMB,R,Q,C
* 
*     NAME:   IO..
*     SOURCE: 92071-18100 
*     RELOC:  92071-1X100 
*     PGMR:   C.H.W.,DJN
* 
*  **************************************************************** 
*  * (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 IO..,7  92071-1X100  REV.2041  800806 
* 
* 
* 
* 
      SUP 
      ENT IO..
* 
      EXT O.BUF,TMP.,OPEN.,WRITF
      EXT CNUMO,.MVW,.XLA,.XLB
      EXT $LUTA,$LUT#,$DVTA,$LIBR,$LIBX 
* 
* 
IO..  NOP 
      LDA IO..
      INA 
      LDB 0,I       PICK UP ADDRESS OF NUMBER OF PARAMS 
      LDB 1,I       PICK UP THE NUMBER OF PARAMS
      STB NUMPA     SAVE THE NUMBER FOR LOOP TERMINATION
      INA           SECOND PARAM IS PARSE BUFFER ADDRESS
      LDB 0,I       GET IT
      INB           POINT PAST THE TYPE FIELD 
      STB PRMAD     SAVE THE ADDRESS FOR LATER
      INA 
      LDA 0,I 
      STA ERRTN     SAVE ADDRESS OF ERROR RETURN
      LDA IO..,I    ADJUST RETURN 
      STA IO..      SAVE RETURN ADDRESS 
      JSB .XLA      GET STARTING ADDRESS OF LUT 
      DEF $LUTA 
      STA LUTA      SAVE LOCALLY FOR LATER USE
      JSB .XLA      GET SIZE OF THE LUT 
      DEF $LUT# 
      STA LUT#      SAVE A LOCAL COPY 
* 
* PROCESS LU PARAMATER
* 
      LDA NUMPA     WAS AN LU GIVEN?
      SZA,RSS       IF ZERO, NO 
      JMP DOALL     NONE PASSED, SO DISPLAY ALL 
* 
      LDA 1,I       PICK UP FIRST LU
      JSB RANGE     DO A RANGE CHECK
* 
* RETURN TO HERE MEANS 0<LU<=LUT# 
* 
      STA LU        SAVE LU SINCE OUTHD MODS REGS 
      JSB OUTHD     GOOD LU, SO OPEN FILE,OUTPUT HEADER 
      LDA LU        RESTORE LU
      JSB DSPLU     DISPLAY INF ABOUT LU IN A 
      CLA,INA       SET UP PARAM COUNTER FOR ITERATION
      STA PARM# 
IO.00 LDA NUMPA     PICK UP NUMBER OF PASSED PARAMS 
      CPA PARM#     ALL PARAMS HANDLED? 
      JMP EXIT      YES, SO EXIT
      ISZ PARM#     INCRIMENT COUNTER 
      LDB PRMAD     PICK UP PARSE BUFFER ADDRESS
      ADB .4        POINT TO NEXT PARAM 
      STB PRMAD     ADJUST THE BUFFER ADDRESS 
      LDA 1,I       PICK UP THE PARAMATER 
      JSB RANGE     DO A RANGE CHECK
      JSB DSPLU     OUTPUT INF ABOUT THIS LU
      JMP IO.00     ITERATE 
* 
DOALL JSB OUTHD     OPEN LIST FILE, OUTPUT HEADER 
      CLA,INA       INITIALIZE LU COUNTER 
      STA LU        SAVE FOR ITERATION
IO.05 JSB DSPLU     DISPLAY INFORMATION ABOUT THE LU
      LDA LU        GET LAST LU DISPLAYED 
      CPA LUT#      DISPLAYED ALL YET?
      JMP EXIT      YES, WE ARE DONE
      ISZ LU        NOT DONE, SO INCRIMENT LU 
      LDA LU        AND DISPLAY THE NEXT LU 
      JMP IO.05 
* 
* 
* DSPLU ACCEPTS AN LU NUMBER IN THE A REGISTER, AND 
* DISPLAYS INFORMATION ABOUT THAT LU TO THE LIST FILE.
* REGISTER RETURNS ARE MEANINGLESS.  LUTA MUST BE SET 
* UP IN ADVANCE.
* 
DSPLU NOP 
      STA TEMP      SAVE LU RESTORE AFTER DECIM CALL
      JSB DECIM     PUT LU IN ITS FIELD 
      STA M1F1
      STA M1F10 
      LDA TEMP      RESTORE LU
      ADA LUTA      INDEX INTO LU TABLE 
      ADA N1        ADJUST FOR FIRST ENTRY
      STA PNTR      POINTER USED FOR INDEXING INTO LUT
* 
      CLA 
      STA TEMP      TEMP=DVT # DURING SEARCH
      JSB .XLB      GET DVT ADDRESS 
      DEF PNTR,I
      STB TEMP2     SAVE LOCALLY
      SZB,RSS       DOES THIS LU HAVE A DVT?
      JMP IO.80      NO 
      JSB .XLB      ADDR OF 1ST DVT IN DVT AREA 
      DEF $DVTA 
*  HERE WE COMPUTE RELATIVE DVT # FROM ITS ADDRESS
* 
IO.20 ISZ TEMP      BUMP DVT #
      CPB TEMP2     IS THIS THE ONE FOR THE LU? 
      JMP IO.25      YES
      ADB .20        NO, POINT TO DVT21 
      STB TEMP1 
      JSB .XLB      GET DVTP SIZE 
      DEF 1,I 
      LSR 9         RIGHT JUSTIFY IN B
      ADB TEMP1     COMPUTE ADDR
      ADB .2          OF NEXT DVT 
      JMP IO.20      AND ITERATE
* 
IO.25 LDA TEMP      DVT # 
      JSB DECIM     CONVERT TO 2 ASCII DIGITS 
      STA M1F2
* 
      LDB TEMP2     GET DVT ADDR
      STB DVADR 
      ADB .4        POINT TO DVT5 
      JSB .XLA      GET IT
      DEF 1,I 
      ELA,CLE,ERA   CLEAR SIGN
      ADA .5        POINT TO IFT6 
      JSB .XLA      GET IT
      DEF 0,I 
      STA IFT6
      JSB OCTAL     CONVERT TO ASCII-OCTAL
      STA M1F3      STORE S.C. IN ASCII 
* 
      LDA DBLNK 
      STA M1F4      DVR PARAMETER FIELD 
      STA M1F4+1     TO BLANKS IN CASE THERE
      STA M1F4+2      IS NONE 
      JSB .XLB      DVT ADDR
      DEF PNTR,I
      ADB .20       POINT TO DVT21
      JSB .XLA
      DEF 1,I 
      AND B1770     ISOLATE # OF PARAMS 
      SZA,RSS       ANY?
      JMP IO.30      NO 
      ADB .2         YES, POINT TO D.P. (DVT23) 
      JSB .XLA      GET 1ST PARAM 
      DEF 1,I 
      STA TEMP
* 
      JSB CNUMO     CONVERT DVR PARAM TO ASCII(OCTAL) 
      DEF *+3 
      DEF TEMP
      DEF M1F4
* 
IO.30 LDB DVADR 
      ADB .19       ADDR OF DVT20 
      JSB .XLA      GET DEVICE PRIORITY 
      DEF 1,I 
      JSB OCTAL     CONVERT TO ASCII-OCTAL
      STA M1F5
* 
      JSB CNUMO     CONVERT DVT ADDR TO ASCII(OCTAL)
      DEF *+3 
      DEF DVADR 
      DEF M1F6
* 
      LDB DVADR 
      ADB .5        POINT TO DVT6 
      JSB .XLA      GET IT
      DEF 1,I 
      ALF,ALF       RIGHT JUSTIFY DEVICE TYPE 
      STA TEMP
      JSB OCTAL     CONVERT TO ASCII-OCTAL
      STA M1F7      STORE DEVICE TYPE IN MSG
* 
      LDB DSCTB     ADDR OF DEVICE DESCRIPTION TABLE
IO.40 LDA 1,I       GET CODE WORD 
      CPA N1        END OF TABLE? 
      JMP IO.45      YES, USE BLANKS
      XOR TEMP      SET-UP FIELD COMPARISON 
      STA TEMP1 
      LDA 1,I       GET CODE WORD AGAIN 
      ALF,ALF 
      RAL,RAL       GET MASK FOR TEST 
      AND TEMP1     TEST UNDER MASK 
      AND B77       6 BIT DEVICE TYPE ONLY
      SZA,RSS       IS IT THIS DEVICE TYPE? 
      JMP IO.45      YES
      ADB .7        POINT TO NEXT ENTRY 
      JMP IO.40      & ITERATE
IO.45 LDA 1 
      INA           A=ADDR OF DESCRIPTION 
      LDB DESCR     ADDR OF DESTINATION 
      JSB .MVW      MOVE INTO OUTPUT LINE 
      DEF .6
      NOP 
* 
      LDA IFT6      CONTENTS OF IFT6
      ALF,ALF       RIGHT JUSTIFY INTERFACE TYPE
      JSB OCTAL     CONVERT TO ASCII-OCTAL
      STA M1F9      STORE I.TYPE IN MSG 
* 
      JSB OUTPT     PRINT LINE FOR THIS LU
      DEF MSG1
      DEF MSG1L 
      JMP DSPLU,I 
* 
*  NO DVT ASSIGNED TO LU
IO.80 LDA M1F1      ASCII LU #
      STA M2F1      STORE IN MSG
      STA M2F2
      JSB OUTPT     PRINT LU UNASSIGNED LINE
      DEF MSG2
      DEF MSG2L 
      JMP DSPLU,I 
* 
      SPC 2 
*  ERROR EXITS
ER56  LDA .56 
ERR   STA ERRTN,I   RETURN ERROR
* 
EXIT  JMP IO..,I
* 
* ROUTINE TO OPEN LIST FILE AND OUTPUT THE HEADER.
* NOTE THAT THE A AND B REGISTERS ARE MODIFIED. 
* 
OUTHD NOP 
      JSB OPEN.     OPEN LIST FILE
      DEF *+5 
      DEF O.BUF 
      DEF TMP.
      DEF TMP.+3
      DEF ZERO
* 
      CLA           INTITIALIZE ERROR FLAG
      STA IERR
* 
      JSB OUTPT     OUTPUT HEADER 
      DEF HDR 
      DEF HDRL
      JMP OUTHD,I 
* 
* ROUTINE TO CHECK THE RANGE OF THE LU PARAMATERS.
* A CONTAINS THE LU, AND IS LEFT UNMODIFIED.
* B WILL BE MODIFIED BY THE CALL. 
* THE ROUTINE JUMPS TO ER56 IF A RANGE ERROR IS 
* DETECTED AND A RETURN IMPIES NO ERRORS. 
* 
RANGE NOP 
      STA 1         COPY LU INTO B
      CMB,INB       NEGATE LU 
      SSB,RSS       WAS IT NEGATIVE TO BEGIN WITH?
      JMP ER56      YES, RETURN ERROR 
      ADB LUT#      ADD NUMBER OF LUS 
      SSB           O.K.? 
      JMP ER56      NO SUCH LU. 
      JMP RANGE,I 
      SPC 3 
* 
*  ROUTINE TO CONVERT NUMERIC TO 2 ASCII DIGITS 
* 
DECIM NOP 
      CLB 
      DIV .10 
      SZA,RSS 
      LDA B20       SUPPRESS LEADING ZERO 
      ALF,ALF 
      IOR 1         MERGE 2 DIGITS
      XOR ASC00     FORM ASCII NUMERICS 
      JMP DECIM,I 
      SPC 3 
* 
*  ROUTINE TO CONVERT TO 6-BITS TO 2 ASCII-OCTAL CHARACTERS 
* 
OCTAL NOP 
      AND B77       ISOLATE BITS 5-0
      CLB 
      DIV .8        A=HI, B=LOW 
      ALF,ALF       LEFT JUSTIFY HI 
      IOR 1         MERGE DIGITS
      IOR ASC00     CONVERT TO ASCII NUMERICS 
      JMP OCTAL,I   RETURN
      SPC 3 
* 
*  ROUTINE TO WRITE LINE TO LIST FILE 
* 
OUTPT NOP 
      DLD OUTPT,I   GET ADDR OF BUFFER & ADDR OF LENGTH 
      DST OUTP5     STORE IN-LINE OF CALL 
      JSB WRITF     WRITE LINE
      DEF *+5 
      DEF O.BUF 
      DEF IERR
OUTP5 BSS 2 
      LDA IERR      GET FMGR ERROR CODE 
      SSA           ERROR?
      JMP ERR        YES
      ISZ OUTPT 
      ISZ OUTPT 
      JMP OUTPT,I   RETURN
      SPC 3 
* 
*  DATA AREA
* 
TEMP  NOP 
TEMP1 NOP 
TEMP2 NOP 
NUMPA NOP 
PRMAD NOP 
ERRTN NOP 
LUTA  NOP 
LUT#  NOP 
PARM# NOP 
PNTR  NOP 
IERR  NOP 
IFT6  NOP 
LU    NOP 
DVADR NOP 
ZERO  DEC 0 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEC 6 
.7    DEC 7 
.8    DEC 8 
.10   DEC 10
.19   DEC 19
.20   DEC 20
.56   DEC 56
B20   OCT 20
B77   OCT 77
B1770 OCT 177000
N1    DEC -1
ASC00 ASC 1,00
DESCR DEF M1F8
DSCTB DEF TABLE 
* 
HDR   ASC 18,    LU    DVT  S.C.   DP#1 PRIO  DVT 
      ASC 17, ADR D.TYPE-  DEVICE    I.TYPE  LU 
HDRL  ABS *-HDR 
DBLNK EQU HDR+1 
* 
MSG1  ASC 2,
M1F1  NOP 
      ASC 2,
M1F2  NOP 
      ASC 2,
M1F3  NOP 
      ASC 1,
M1F4  BSS 3 
      ASC 1,
M1F5  NOP 
      ASC 2,
M1F6  BSS 3 
      ASC 2,
M1F7  NOP 
      ASC 1,
M1F8  BSS 6 
      ASC 2,
M1F9  NOP 
      ASC 1,
M1F10 NOP 
MSG1L ABS *-MSG1
* 
MSG2  ASC 2,
M2F1  NOP 
      ASC 17,    -------------------- LU UNASSI 
      ASC 14,GNED --------------------
M2F2  NOP 
MSG2L ABS *-MSG2
* 
*  TABLE OF DESCRIPTIONS BASED ON DEVICE TYPE 
*     1ST WD OF EACH ENTRY:  BITS 11-6 CONTAIN MASK FOR TYPE CHECK
*                            BITS  5-0 HAVE VALUE TO TEST UNDER MASK
TABLE EQU * 
      OCT 7000      0 - 7 
      ASC 6,KEYBD CTL DV
      OCT 7712      12
      ASC 6,LINE PRINTER
      OCT 7010      10-17 
      ASC 6,SYS PERIPHRL
      OCT 7020      20-27 
      ASC 6,SER RECORDNG
      OCT 7030      30-37 
      ASC 6,MOV HD DISC 
      OCT 7440      40-43 
      ASC 6,CPU FUNCTION
      OCT 7444      44-47 
      ASC 6,MISC PERPHRL
      OCT 7050      50-57 
      ASC 6,A/D MEAS DEV
      OCT 7060      60-67 
      ASC 6,CPU COMM DVR
      OCT 7070      70-77 
      ASC 6,INSTRUMENT
      DEC -1
      ASC 6,
* 
SIZE  EQU * 
* 
      END 
                                                                                                