ASMB,R,Q,C HED MESS, RTE HP-IB MESSAGE SUBROUTINE LIBRARY NAM MESS,7 59310-16011 REV 1926 790424 * * ENT TRIGR,CLEAR,RMOTE,GTL,LLO,LOCL ENT STATS,PPOLL,PSTAT,CNFG,ABRT * EXT .ENTR,EXEC,IPUT,LUTRU * *************************************************** * (C) COPYRIGHT HEWLETT-PACKARD CO., 1978 * * ALL RIGHTS RESERVED * *************************************************** * * * MESS - RTE HP-IB MESSAGE UTILITY LIBRARY * * * * RELOC: 59310-16011 * * SOURCE: 59310-18011 * * * *************************************************** * EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B * ************************************************** * * * HP-IB MESSAGE SUBROUTINES * * * * TRIGR,CLEAR,RMOTE,GTL,LLO,LOCL,STATS, * * PPOLL,PSTAT,CNFG,ABRT * * * ************************************************** SKP ************************************************** * PCO 1926 * PROBLEM DEVELOPED WITH THE USE OF THIS * WITH DSD SESSION MONITOR. THE SUBROUTINE "SET" * USES THE LU NUMBER TO INDEX THROUGH THE DRT TABLE. * WHEN THIS MODULE IS USED WITH SESSION, THE SESSION * LU IS OF COURSE THE LU NUMBER THAT IS USED. * * SOLUTION WAS TO MAKE A CALL TO SESSION LUTRU TO GET THE * TRUE LU VALUE FOR INDEXING THROUGHT THE DRT. * * ALSO AT THIS TIME THE COMMENTS WERE CHANGED TO * REFERENCE SYSTEM AND SESSION LU RATHER THAN JUST LU. * * ALSO THE MASK VALUE FOR SESSION LU WAS CHANGED FROM B77 * TO B377 IS SUBROUTINE "SET" AND THE RANGE FROM 1-63 TO 1-255 * IN COMMENTS AS APPROPRIATE. * ********************************************************* SKP * * ****************************************************************** * * * * TRIGGER * CALL TRIGR(LU) * * * * * * WHERE: LU = SESSION LU AUTO ADRESSING OR * * * DIRECT I/O SESSION LU IN * * * RANGE OF 1-255 * * * * ****************************************************************** TRIGR NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP TRIG1 YES(DIRECT I/O MODE) * * * TRIGR - AUTO ADDRESSING MODE * * JSB CNTL NO, FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL STA CBUFR SAVE IN FIRST WORD OF CMND BUFR LDA GET LOAD GET COMMAND STA CBUFR+1 SAVE IN SECOND WORD OF CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR TRIGR CMNDS JMP RTN1 EXIT * * * TRIGR - DIRECT I/O MODE * * TRIG1 JSB CNTL FORM DIRECT I/O CTL WORD * LDA GET LOAD GET COMMAND STA CBUFR SAVE IN COMMAND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O TRIGR CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * CLEAR * CALL CLEAR(LU,I) * * * * * * WHERE: LU = SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN * * * RANGE 1-255 * * * * * I=FUNCTION CODE * * * I=1 FOR SELECTED DEVICE CLEAR * * * I=2 FOR UNIVERSAL DEVICE CLEAR * * * (DIRECT I/O ONLY) * * * * ****************************************************************** CLEAR NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * LDB CPAR2,I LOAD I PARAMETER CPB .1 I=1? JMP CLR1 YES CPB .2 NO,I=2? JMP CLR2 YES JMP LOSE INVALID I PARAMETER,EXIT WITH ERROR * CLR1 SZA,RSS I=1,SUBCHANNEL=0? JMP CLR3 YES(DIRECT I/O MODE) JMP CLR4 NO(AUTO ADDR MODE) * CLR2 SZA I=2,SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * * * CLEAR - DIRECT I/O MODE * * CLR3 JSB CNTL FORM DIRECT I/O CTL WORD * CPB .1 I=1? JMP *+3 YES LDA DCL NO,I=2,LOAD UNIV DEV CLEAR CMND JMP *+2 LDA SDC LOAD SELECTED DEVICE CLEAR CMND STA CBUFR SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O CLEAR CMND JMP RTN1 * * * CLEAR - AUTO ADDRESSING MODE * * CLR4 JSB CNTL FORM ATO ADDR CTL WORD * LDA T3 LOAD SUBCHANNEL IOR UNLSN MERGE UNL,LSN CMNDS WITH SUBCHANNEL STA CBUFR SAVE IN FIRST WORD OF AUTO ADDR CMND BUFR * LDA SDC LOAD SELECTED DEVICE CLEAR CMND AND STA CBUFR+1 SAVE IN SECOND WORD OF AUTO ADDR CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR CLEAR CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * REMOTE * CALL RMOTE(LU) * * * * * * WHERE: LU =SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN * * * RANGE 1-255 * * * * ****************************************************************** RMOTE NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * LDA CTL16 LOAD REN CONTROL REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR1 MAKE REN ENABLE CONTROL REQUEST * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP RTN1 YES,EXIT(DIRECT I/O MODE) * * * RMOTE - AUTO ADDRESSING MODE * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL AND STA CBUFR SAVE IN AUTO ADDR COMMAND BUFR * LDA M2 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR REMOT CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * GO TO LOCAL * CALL GTL(LU) * * * * * * WHERE: LU = SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN * * * RANGE 1-255 * * * * ****************************************************************** GTL NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP GTL1 YES(DIRECT I/O MODE) * * * GTL - AUTO ADDRESSING MODE * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL STA CBUFR SAVE IN FIRST OF AUTO ADDR CMND BUFR LDA GOLOC LOAD GTL COMMAND AND STA CBUFR+1 STORE IN SECOND WORD OF AUTO ADDR CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR GTL CMNDS JMP RTN1 EXIT * * * GTL - DIRECT I/O MODE * * GTL1 JSB CNTL FORM DIRECT I/O CTL WORD * LDA GOLOC LOAD GTL COMMAND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O GTL COMMANDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * LOCAL LOCK OUT * CALL LLO(BLU) * * * * * * WHERE: BLU=DIRECT I/O SESSION LU * * * IN RANGE 1-255 * ****************************************************************** LLO NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * JSB CNTL YES,FORM DIRECT I/O CTL WORD * LDA LLOCK LOAD LLO COMMAND AND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD COMMAND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O LLO CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * LOCAL * CALL LOCL(BLU) * * * WHERE: BLU=DIRECT I/O SESSION LU IN RANGE* * * OF 1-255 * * * * ****************************************************************** LOCL NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * LDA CTL17 YES(DIRECT I/O),LOAD CONTROL REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * JSB CTLR1 MAKE LOCAL ENABLE CONTROL REQUEST JMP RTN1 EXIT * SKP ****************************************************************** * * * * DYNAMIC STATUS * CALL STATS(LU,I) * * * * * * WHERE: LU = SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN * * * RANGE 1-255 * * I=DEVICE/BUS STATUS RETURNED * * * IN LOWER BYTE * * * * ****************************************************************** STATS NOP JSB SET RETRIEVE VALID PARAMETERS * LDA CTL6 LOAD CONTROL REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN CONTROL WORD * STAT ADB .3 INCREMENT EQT ADDRESS TO WORD 4 LDA 1,I LOAD EQT WORD 4 AND BIT14 ISOLATE BUFFERING BIT 14 SZA,RSS BIT 14=0? JMP STAT1 YES(UNBUFFERED),GO MAKE STATUS REQUEST * XOR 1,I NO(BUFFERED),FORCE UNBUFFERED,SET BIT14=0 STB T3 SAVE EQT WORD 4 ADDRESS STA T4 SAVE NEW UNBUFFERED EQT WORD 4 * JSB BUFCG STORE UNBUFFERED EQT WORD 4 * CCA SET FLAG TO RESET BIT 14 LATER STA T2 AND SAVE * STAT1 JSB CTLR1 MAKE STATUS CONROL REQUEST * * (A)=STATUS WORD * AND B377 MASK LOWER STATUS BYTE STA CPAR2,I STORE STATUS BYTE IN USER BUFFER * ISZ T2 EQT MODIFIED? JMP RTN1 NO,EXIT LDA T3,I YES,LOAD EQT WORD 4 IOR BIT14 RESET BUFFER BIT 14 STA T4 AND SAVE * JSB BUFCG RESTORE BUFFERING IN EQT WORD 4 JMP RTN1 EXIT * SKP ********************************************************************** * * * * PPOLL * CALL PPOLL(LU,I,ASGN) * * * * * * WHERE: LU = SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN RANGE * * * OF 1-255 * * * * * * I=FUNCTION CODE * * * I=1,PARALLEL POLL ENABLE(PPE) * * * I=2,PARALLEL POLL DISABLE(PPD) * * * I=3,PARALLEL POLL UNCONFIGURE(PPU) * * * (DIRECT I/O ONLY) * * * * * * ASGN=POSITIVE OR NEGATIVE INTEGER * * * IN THE RANGE OF 1-8 REPRESENTING * * * HPIB DIO LINE ON WHICH TO RESPOND * * * TO A PARALLEL POLL. * * * * * * POSITIVE INTEGER INDICATES A * * * ZERO RESPONSE AND A NEGATIVE * * * INTEGER INDICATES A ONE RESPONSE * * * TO A PARALLEL POLL. * * * * ********************************************************************** PPOLL NOP JSB SET RETRIEVE VALID PARAMETERS * LDA CPAR2,I LOAD FUNCTION CPA .1 I=1? JMP PPOL1 YES(PPE) CPA .2 NO,I=2? JMP PPOL2 YES(PPD) CPA .3 NO,I=3? JMP PPOL4 YES(PPU) JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * PPOL1 LDA CPAR3,I I=1,LOAD ASSIGNMENT PARAMETER SZA,RSS ASSIGNMENT=0? JMP LOSE YES,INVALID ASSIGNMENT,EXIT WITH ERROR * SSA,RSS NO,IS ASSIGNMENT NEGATIVE? JMP *+2 NO,ASSIGNMENT IS POSITIVE * CMA,INA YES,CONVERT TO POSITIVE NUMBER * ADA M9 SUBTRACT NINE FROM ASSIGNMENT SSA,RSS 1<=ASGN<=8 ?? JMP LOSE NO,INVALID ASSIGNMENT,EXIT WITH ERROR * ADA .8 ADD EIGHT TO ASSIGNMENT IOR PPCE MERGE DATA LINE AND PPC,PPE CMNDS * LDB CPAR3,I LOAD ASSIGNMENT AGAIN SSB IS ASSIGNMENT POSITIVE? IOR .8 NO,SET BIT 3 IN COMMAND WORD STA CBUFR YES,SAVE FIRST COMMAND WORD JMP *+3 * PPOL2 LDA PPCD LOAD PPC,PPD COMMANDS STA CBUFR AND SAVE IN COMMAND WORD * JSB IOSTA GET I/O STATUS REQUEST * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP PPOL3 YES(DIRECT I/O MODE) * * * PPOLL - AUTO ADDRESSING MODE (PPE,PPD) * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA CBUFR LOAD SECOND COMMAND WORD STA CBUFR+1 AND STORE IN SECOND WORD OF CMND BUFR * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL STA CBUFR AND SAVE IN FIRST WORD OF CMND BUFR * LDA M4 LOAD COMMAND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR PPOLL CMNDS JMP RTN1 EXIT * * * PPOLL - DIRECT I/O MODE (PPE,PPD) * * PPOL3 JSB CNTL FORM DIRECT I/O CTL WORD * LDA M2 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O PPOLL CMNDS JMP RTN1 * * * PPOLL - UNCONFIGURE (DIRECT I/O ONLY) * * PPOL4 JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * JSB CNTL YES,FORM DIRECT I/O CTL WORD * LDA PPU LOAD PPU COMMAND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT OUTPUT DIRECT I/O PPOLL COMMANDS JMP RTN1 EXIT * SKP ********************************************************************** * * * * PARALLEL POLL STATUS * CALL PSTAT(BLU,I) * * * * * * WHERE: BLU=DIRECT I/O SESSION LU * * * IN RANGE OF 1-255 * * * * * * I=INTEGER VARIABLE IN WHICH * * * STATUS OF BUS DATA LINES * * * DIO1-DIO8 WILL BE RETURNED * * * IN THE LOWER BYTE. * * * BIT0=DIO1,BIT1=DIO2,ETC. * * * * ********************************************************************** PSTAT NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * LDA B3000 YES,LOAD PARALLEL POLL REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * JMP STAT INITIATE PARALLEL POLL STATUS REQUEST * SKP ******************************************************************* * * * * CONFIGURE * CALL CNFG(LU,I,IW) * * * * * * WHERE: LU = SESSION LU AUTO ADDRESSING * * * OR DIRECT I/O SESSION LU IN * * * RANGE OF 1-255 * * * * * I=FUNCTION CODE * * * I=1,CONFIGURATION REQUEST * * * I=2,UNCONFIGURE REQUEST * * * * * * IW=DEVICE/BUS CONFIGURATION WORD * * * * ******************************************************************* CNFG NOP JSB SET RETRIEVE VALID PARAMETERS * LDA CPAR2,I LOAD FUNCTION CPA .1 I=1? JMP CNFG1 YES(CONFIGURE REQUEST) CPA .2 NO,I=2? JMP CNFG2 YES(UNCONFIGURE REQUEST) JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * CNFG1 LDA CTL25 LOAD CONFIGURE REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR2 MAKE CONFIGURE CONTROL REQUEST JMP RTN1 EXIT * CNFG2 LDA CTL27 LOAD UNCONFIGURE REQUEST CODE IOR LU MERGE SESSION LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR1 MAKE UNCONFIGURE CONTROL REQUEST JMP RTN1 EXIT * SKP ******************************************************************** * * * * ABORT * CALL ABRT(BLU,I) * * * * * * WHERE: BLU=DIRECT I/O SESSION LU IN RANGE * * * OF 1-255 * * * * * * I=FUNCTION CODE * * * I=1,ISSUE IFC COMMAND ONLY * * * I=2,ISSUE IFC AND DCL COMMANDS * * * I=3,ISSUE UNT,UNL COMMANDS * * * * ******************************************************************** ABRT NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID SESSION LU,EXIT WITH ERROR * LDA LU YES(DIRECT I/O),LOAD SESSION LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * LDA CPAR2,I LOAD FUNCTION CPA .1 I=1? JMP ABRT1 YES CPA .2 NO,I=2? JMP ABRT2 YES CPA .3 NO,I=3? JMP ABRT3 YES JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * ABRT1 LDA .1 LOAD CTL REQ PARAMETER JMP *+2 * ABRT2 CLA STA PARM3 AND SAVE IN CTL WORD PARM BUFR * JSB EXEC MAKE ABORT CONTROL REQUEST DEF *+4 DEF .3 DEF CTLWD DEF PARM3 JMP RTN1 EXIT * ABRT3 JSB CNTL FORM DIRECT I/O CTL WORD BUFR * LDA UNTLK LOAD UNT,UNL CMNDS STA CBUFR AND SAVE IN CMND BUFR * LDA M2 LOAD CMND BUFR LNGTH STA CLGTH AND SAVE * JSB OUTPT OUTPUT UNT,UNL CMNDS JMP RTN1 EXIT *