ASMB,L,C     ** REIO ** 
*     NAME:   MREIO 
*     SOURCE: 92064-18214 
*     RELOC:  92064-16081 
*     PGMR:   G.A.A.
*     DATE:   OCT.   2,1974 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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 MREIO,7  92064-16081  REV.1826  780426
      EXT .DFER,$LIBR,$LIBX,EXEC,.ENTR
      ENT REIO
      SUP 
      SPC 1 
*     THIS ROUTINE DOES REENTRENT I/O IF THE USERS BUFFER 
*     IS 3 OR MORE WORDS ABOVE THE LOW MAIN ADDRESS 
*     THIS RESTRICTION IS ENFORCED BECAUSE THE USERS BUFFER 
*     IS USED AS A TDB FOR THE REENTRANT PROCESSOR AND THUS 
*     THREE WORDS ARE REQUIRED AHEAD OF IT. 
* 
*     THESE THREE WORDS ARE SAVED LOCALLY AND THE TDB IS SET UP 
*     AFTER THE I/O HAS COMPLETED THE WORDS ARE RESTORED. 
* 
*     IF THE BUFFER IS TOO CLOSE TO THE LOW MAIN THE I/O IS PREFORMED 
*     IN THE STANDARD MANNER.  THIS IS ALSO TRUE IF THE BUFFER IS 
*     MORE THAN 129 WORDS LONG (TO CONSERVE SYSTEM MEMORY). 
* 
*     CALLING SEQUENCE: 
* 
*     THE SAME AS THE EXEC I/O CALL WITH OUT THE TRACK/SECTOR WORDS.
* 
RQ    BSS 4         PRAMETER ADDRESS AREA 
REIO  NOP           ENTRY POINT 
      JSB .ENTR     FETCH THE PRAMETERS 
      DEF RQ
      LDA RQ+3,I    PULL PRAMETERS IN LOCALLY 
      STA RQ+3      INCASE THEY ARE 
      LDA RQ,I      ARE IN THE THREE WORD 
      STA RQ        AREA AHEAD OF 
      LDA RQ+1,I    THE BUFFER
      STA RQ+1
* 
      LDA RQ+2      GET THE BUFFER ADDRESS
      ADA N3        LESS THREE AND
      STA TDBA      SET UP THE LIBR/LIBX
      STA TDBA2     CALLS 
      CMA            SET NEGATIVE AND TEST
      LDB XEQT      .CHECK FOR LOW MAIN ADDRESS INTRUSION 
      ADB D22 
      ADA B,I 
      CLE,SSA,RSS   IF BELOW THE FENCE
      JMP DIRIO     GO DO DIRECT I/O. 
* 
      JSB .DFER     ELSE SAVE THE THREE WORDS 
      DEF S1        IN LOCAL SAVE AREA
      DEF TDBA,I
      LDB RQ+3      GET THE REQUEST LENGTH
      SSB,RSS       IF POSITIVE SKIP CONVERSION 
      JMP RE1 
* 
      BRS           CONVERT CHARACTERS TO 
      CMB,INB       WORDS AND SET POSITIVE
RE1   ADB D3        ADD THREE WORDS FOR TDB LENGTH
      STB A         AND PUT IN A FOR LENGTH TEST
      ADA N133      SUBTRACT 133 (129 + 3 + 1)
      CLE,SSA,RSS   IF POSITIVE OF ZERO 
      JMP DIRIO     DO IT DIRECT
* 
      CLA,CCE       SET ZERO IN WORD ONE AND
      DST TDBA,I    LENGTH IN WORD TWO OF THE TDB 
      JSB DOIO      GO DO THE I/O 
S1    OCT 0,0,0     RETURN SKIPS THREE WORDS
      DST RQ        SAVE THE REGISTERS
      JSB .DFER     RESTORE THE THREE WORDS 
      DEF TDBA,I
      DEF S1
      DLD RQ        RESTORE THE A AND B REGS. 
      JMP REIO,I    AND EXIT TO USER. 
* 
DOIO  NOP 
      JSB $LIBR     TELL THE SYSTEM WE ARE
TDBA  DEF *         RENT
DIRIO JSB EXEC      DO THE I/O CALL 
      DEF EX        RETURN ADDRESS
      DEF RQ
      DEF RQ+1
      DEF RQ+2,I
      DEF RQ+3
EX    RSS           SKIP IF ERROR EXIT
      ISZ REIO      ELSE STEP RETURN ADDRESS
      SEZ,RSS       IF DIRECT 
      JMP REIO,I    EXIT
* 
      JSB $LIBX     ELSE EXIT RENT
TDBA2 DEF *         SECTION 
D3    DEC 3         +3 WORDS
* 
N133  DEC -133
N3    DEC -3
D22   DEC 22
XEQT  EQU 1717B 
A     EQU 0 
B     EQU 1 
      ORG * 
      END 
                                                                                                                                                                              