ASMB
  HED  FLUSH A CLASS I/O  (RTE-III/IV)  F. GAULLIER   15/APR/77 
      NAM KLCLS,7 . 92080-1X036 REV.2026  800515  1900
* 
*     SOURCE 92080-18036
* 
      SPC 2 
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
* PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
**************************************************************
      SPC 2 
* 
*     THIS ROUTINE DO A COMPLETE CLEAN UP OF A CLASS I/O
*     AND TERMINATE BY RELEASING THE CLASS. 
*     WHEN SOME I/O DEVICE HAVE NOT COMPLETED THEIR OPERATIONS
*     A TIMEOUT OF 10 MSEC IS FORCED TO THESE PERIPHERALS IN
*     ORDER TO GET THE CLASS BUFFER AND RELEASE THE SAM.
* 
*     CALLING SEQUENCE: 
* 
*        IF ( KLCLS(ICLAS) )  GOTO ERROR
*             ICLAS IS THE CLASS NUMBER 
* 
  SPC 2 
A     EQU 0 
B     EQU 1 
      SUP PRESS EXTENDED LISTING
  SPC 1 
      EXT EXEC,$LIBR,$LIBX,.ENTR
      ENT KLCLS 
  SPC 2 
$OFF  NOP 
      JSB $LIBR 
      OCT 0         PRIVILEDGE ROUTINE
      JMP $OFF,I
  SPC 1 
$ON   NOP 
      JSB $LIBX     EXIT FROM PRIVILEDGE ROUTINE
      DEF $ON 
  SPC 2 
.CL#  NOP           CLASS I/O WORD
KLCLS NOP 
      JSB .ENTR 
      DEF .CL#
* 
      LDA .CL#,I
      AND MSK       CLEAR  BITS 15-14-13
      SZA,RSS 
      JMP OKRTN 
      STA CLASW     SAVE CLASS I/O WORD 
      JSB EXEC      DO A WRITE/READ CLASS I/O 
      DEF *+8 
      DEF NAB20     WRITE/READ - NO ABORT 
      DEF D0
      DEF *         DUMMY BUF 
      DEF D1        DUMMY LEN 
      DEF *         DUMMY PARAMETERS
      DEF *         DUMMY PARAMETERS
      DEF CLASW     CLASS WORD
      JMP REL50     ERROR ! CHECK IT IS "IO 00" 
* 
      LDA CLASW     RECALL CLASS WORD 
      IOR BIT15     SET "NO WAIT BIT" 
      STA CLASS 
  SPC 1 
RELC3 JSB EXEC      GET TO DE-ALLOCATE
      DEF *+5 
      DEF NAB21     GET CLASS - NO ABORT
      DEF CLASS     CLASS WORD
      DEF TEMP      DUMMY BUFFER
      DEF D1
      JMP REL50     ERROR RETURN CHECK CODE 
      SSA,RSS 
      JMP RELC3     LOOP UNTIL END OF CLASS 
  SPC 1 
      STA #RQ       SAVE -(N-1) REQUEST IN QUEUE
      CMA,SZA,RSS   # OF REQUEST IN QUEUE 
      JMP OKRTN     CLASS IS EMPTY, EXIT. 
  SPC 1 
      LDA EQTA      GO THROUGH ALL EQT TO FORCE A TO
      STA EQTPT     ON ALL DEVICES WAITTING ON THIS CLASS 
      LDA EQT#
      CMA,INA 
      STA EQTCT 
  SPC 1 
REL20 XLA EQTPT,I   GET EQT1
      SZA,RSS       EQT BUSY ?
      JMP REL24     NO, GOTO NEXT ONE 
      SSA 
      HLT 
      INA           GET 2ND WORD OF SAM BUFFER
      STA TEMP
  SPC 1 
**********************************  PRIVILEDGE MODE 
      JSB $OFF
      XLA TEMP,I    GET WORD 2
      RAL 
      SSA,SLA,RSS   T FIEL = 3 ?
      JMP REL22     NO, FORGET IT 
      LDA TEMP      YES, IT IS A CLASS REQUEST
      ADA D3        GO CHECK CLASS WORD 
      XLA A,I       GET CLASS WORD FROM SAM BUFFER
      AND MSK 
      CPA CLASW     BELONG TO THIS CLASS ?
      RSS           YES, GO SET A TIME OUT
      JMP REL22     NO, SKIP SET TIME OUT CODE
      LDB EQTPT     RECALL EQT1 
      ADB D4
      LDA B,I       GET DVR TYPE
      AND MSKDV 
      CPA O3400     DVR7 ?
      JMP DVR7      YES, GOT TO SPECIAL PROCESSING FOR DRIVER 7 
      ADB D10 
      CCA           SET A TIMEOUT OF
      STA B,I       10 MSEC INTO EQT15
      JMP REL21 
* 
* SPECIAL PROCESSING FOR DVR7, REQUIRED BECAUSE THE ASSHOLE WHO WROTE 
* IT DID NOT FOLLOW THE TIMEOUT CONVENTION. 
* 
DVR7  ADB D9
      LDA B,I       SAVE OLD TIME OUT VALUE 
      STA TOSAV 
      CCA 
      STA B,I       SET CLOCK TO 10 MSEC IN EQT14 
      STB BSAV
      JSB $ON 
      LDA DM32K 
      ISZ A         WAIT 100MSEC FOR TERMINAL TO TIME OUT 
      JMP *-1 
      JSB $OFF
      LDB BSAV
      LDA TOSAV     RESET TIME OUT TO ORIGINAL VALUE
      STA B,I 
REL21 ISZ #RQ       UPDATE # OF PENDING RQ (NEVER SKIP !!)
REL22 JSB $ON 
**********************************  PRIVILEDGE MODE $END
  SPC 1 
REL24 LDA #RQ       RECALL -(N-1) REQUEST LEFT IN THE QUEUE 
      CMA,SZA,RSS   ALL PENDING REQUEST FOUNDED ? 
      JMP REL30     YES, GO GET THEM
      LDA EQTPT     GET EQT POINTER 
      ADA D15       POINT TO NEXT EQT 
      STA EQTPT 
      ISZ EQTCT     MORE EQT ?
      JMP REL20     YES, CONTINUE 
* 
REL30 LDA DM12K     NO, WAIT ABOUT
      ISZ A         30 MS ON XE 
      JMP *-1       BEFORE
      JMP RELC3     GETTING CLASS REQUESTS
  SPC 2 
REL50 CPA ASCIO     CHECK THAT IT IS "IO 00"
      RSS 
      JMP ERRTN     ERROR RETURN
      CPB ASC00 
      JMP OKRTN     OK, RETURN TO USER
ERRTN CCA           ERROR RETURN
      JMP KLCLS,I 
  SPC 1 
OKRTN CLA           EXIT WITH A = 0 
      JMP KLCLS,I 
   SPC 3
BSAV  BSS 1 
TOSAV BSS 1 
NAB20 OCT 100024
NAB21 OCT 100025
ASCIO ASC 1,IO
ASC00 ASC 1,00
EQTA  EQU 1650B 
EQT#  EQU EQTA+1
  SPC 1 
DM12K DEC -12000
DM32K DEC -32768
D0    DEC 0 
D1    DEC 1 
D3    DEC 3 
D4    DEC 4 
D9    DEC 9 
D10   DEC 10
D15   DEC 15
BIT15 OCT 100000
MSKDV OCT 37400 
O3400 OCT 3400
MSK   OCT 17777 
CLASS EQU .CL#
CLASW NOP 
TEMP  EQU $ON 
#RQ   NOP 
EQTPT NOP 
EQTCT NOP 
      END 
                                                                                                                                                                                                          