ASMB,R,L,C
      HED REAL TIME, DOS, AND IOMEC/DOS BINARY READ/WRITE 
* 
*     NAME:   BINRY 
*     SOURCE: 92068-18014 
*     RELOC:  PART OF 92067-16268 AND 92067-16035 
*     PGMR:   R.A.G.
* 
*  ***************************************************************
*  * (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 BINRY,7 92068-1X014 REV.2013 771116 
      ENT BREAD,BWRIT 
      EXT EXEC
      EXT $OPSY 
*  NOTE:  ONLY CHANGE OF 7-26-75 IS NOTED IN CODE (DLB) 
*BINARY READ/WRITE ROUTINES: BREAD/BWRIT
*CALLING SEQUENCE :      JSB BREAD(BWRIT) 
*                        DEF *+7
*                        DEF A     = FWA OF BUFFER
*                        DEF N     (NO. OF WORDS) 
*                        DEF LUN   (LOG.UNIT NO.) 
*                        DEF TRACK
*                        DEF SECTR
*                        DEF OFSET (OFFSET IN SECTR)
*                        (RETURN) 
* 
*FORTRAN CALL:           CALL BREAD(A,N,LUN,ITRAK,ISECT,IOFST)
* 
* 
SINCR NOP 
      LDA $OPSY    IF 
      SSA,RSS      IN 
      JMP LDOS
      LDA LUN,I     RTE, THEN 
      CPA .2        CHECK IF LOGICAL UNIT =2? 
      JMP *+3       YES 
      LDA 1760B     NO, L.U.=3 GET SCTRS/TRACK
      JMP *+4        AND PROCEED
      LDA 1757B     L.U.=2,GET SCTRS/TRACK
      JMP *+2       AND PROCEED 
LDOS  LDA 116B       WE'RE IN DOS/DOSM,GET SCTRS/TRACK
      CPA SECTR     SECTR=MAX?
      JMP *+3       YES 
      ISZ SECTR     NO,BUMP SECTOR AND
      JMP SINCR,I    RETURN 
      CLA           SECTR=MAX SO
      STA SECTR     SET SECTR TO 1ST SECTR OF 
      ISZ TRACK     NEXT TRACK AND
      JMP SINCR,I   RETURN
GTPAR NOP 
      LDA IFLAG     FIRST TIME ?
      SZA 
      JMP INITL     NO. 
      ISZ IFLAG     YES. BUMP FLAG
      LDA $OPSY     A: 0=DOS, 1=IOMEC/DOS, -2=RTE 
      CPA =D1       CHANGED FROM SLA,RSS 7-26-75
      RSS           THIS WAS ADDED 7-26-75
      JMP INITL     DOS OR RTE
      LDA =D128     IOMEC/DOS. BUFFR = 128
      STA PSIZE 
      CMA,INA 
      STA MSIZE 
      LDA BIGED 
      STA BFRND 
INITL INB 
      LDA 1 
      LDA 0,I       BUFFER ADDRESS ?
      RAL,CLE,SLA,ERA   PEEL OFF INDIRECT BIT 
      JMP *-2       LOOP AS LONG AS INDIRECT
      STA ADDRS     FWA OF USER BUFFER
      INB 
      LDA 1,I 
      LDA 0,I       NUMBER OF WORDS 
      CMA,INA 
      STA COUNT     SET COUNT 
      INB 
      LDA 1,I 
      STA LUN       ADDRESS OF LOGICAL UNIT NUMBER
      INB 
      LDA 1,I 
      LDA 0,I 
      STA TRACK     TRACK NO. 
      INB 
      LDA 1,I 
      LDA 0,I 
      STA SECTR     SECTOR NO.
      INB 
      LDA 1,I 
      LDA 0,I       OFFSET
      ADA MSIZE     -64 OR -128 
      SSA,RSS       OFFSET GE SECTOR SIZE?
      JMP *-2       YES, OFFSET MODULO SECTOR SIZE
      ADA PSIZE     RESTORE OFFSET
      ADA BFFWA     FWA OF BUFFER 
      STA BFRAD     SET BUFFER ADDRESS
      JMP GTPAR,I   EXIT
BREAD NOP 
      LDB *-1 
      LDA 1,I 
      STA BREAD     SET RETURN ADDR 
      JSB GTPAR     GET PARAMETERS
      JSB READ      READ SECTOR 
RMOVE LDA BFRAD,I 
      STA ADDRS,I   MOVE DATA-WORD
      ISZ COUNT     END OF TRANSFER ? 
      RSS           NO,CONTINUE 
      JMP BREAD,I   EXIT
      LDA BFRAD 
      CPA BFRND     END OF SECTOR 
      JMP *+4       YES, RE-INIT. AND READ NEXT SECT
      ISZ BFRAD     BUMP SECTOR-BUFFER ADDRS
      ISZ ADDRS     BUMP TARGET LOC 
      JMP RMOVE     CONTINUE XFER 
      LDA BFFWA 
      STA BFRAD     SET READ-BUFFER ADDR AT FWA 
      JSB SINCR     BUMP SECTOR NUMBER
      ISZ ADDRS     BUMP TARGET LOC 
      JMP RMOVE-1   READ NEXT SECTOR AND CONTINUE 
READ  NOP 
      JSB EXEC      READ SECTOR 
      DEF *+7 
      DEF .1        RCODE= 1 FOR READ 
      DEF LUN,I     LOGICAL UNIT NUMBER 
BFFWA DEF BUFFR     BUFFER FWA
      DEF PSIZE     64 OR 128 WORDS 
      DEF TRACK      TRACK NO.
      DEF SECTR     SECTOR NO.
      JMP READ,I    EXIT
BWRIT NOP 
      LDB *-1 
      LDA 1,I 
      STA BWRIT     SET RETURN ADDR 
      JSB GTPAR     GET PARAMETERS
      JSB READ       READ BEFORE WRITE
WMOVE LDA ADDRS,I 
      STA BFRAD,I 
      ISZ COUNT     READY ? 
      JMP *+3       NO, CONTINUE XFER 
      JSB WRITE     YES, WRITE SECTOR 
      JMP BWRIT,I   EXIT
      LDA BFRAD 
      CPA BFRND     END OF BUFFER ? 
      JMP *+4       YES, WRITE SECTOR AND RE-INIT 
      ISZ BFRAD     BUMP WRITE-BUFFER ADDRS 
      ISZ ADDRS     BUMP SOURCE ADDR. 
      JMP WMOVE     CONTINUE XFER 
      JSB WRITE     WRITE SECTOR
      JSB SINCR     BUMP SECTOR NUMBER
      LDA BFFWA 
      STA BFRAD     SET BUFFER ADDR AT FWA
      ISZ ADDRS       BUMP SOURCE ADDRESS 
      JMP WMOVE-1     DO NEXT SECTOR
WRITE NOP 
      JSB EXEC      WRITE SECTOR
      DEF *+7 
      DEF .2        RCODE=2 FOR WRITE 
      DEF LUN,I     LOGICAL UNIT NUMBER 
      DEF BUFFR     BUFFER FWA
      DEF PSIZE     64 OR 128 WORDS 
      DEF TRACK      TRACK NO.
      DEF SECTR     SECTOR NO.
      JMP WRITE,I   EXIT
ADDRS NOP           PARAMETER ADDRS 
COUNT NOP           WORD COUNT
LUN   NOP           LOGICAL UNIT NUMBER 
TRACK NOP           TRACK NO. 
SECTR NOP           SECTOR NO.
BFRAD NOP           POINTER IN SECTOR-BUFFER
BFRND DEF BUFFR+63  LWA 64 WORD SECTOR-BUFFER 
BIGED DEF BUFFR+127 LWA 128 WORD SECTOR-BUFFER
PSIZE DEC 64
MSIZE DEC -64 
.1    DEC 1 
.2    DEC 2 
IFLAG DEC 0 
BUFFR BSS 128       SECTOR - BUFFER (MOVED 7-75)
      END 
* 
* 
                                        