ASMB,R,L,C,Q
      HED R/W$
*     NAME:   R/W$
*     SOURCE: 92067-18145 
*     RELOC:  92067-16125 
*     PGMR:   G.A.A.,N.J.S. 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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 R/W$,7 92067-16125 REV.1903 781214
      EXT EXEC
      ENT R/W$
      ENT D$XFR 
      ENT D.R 
* 
*  R/W$        WRITES THE CURRENT SECTOR BLOCK IF IT HAS
*              BEEN WRITTEN ON OR READS UNCONDITIONALLY.
* 
*        CALL SEQUENCE: 
* 
*                   SET E=0 FOR WRITE  E=1 FOR READ 
*     LDB DCB       SET B TO DCB ADDRESS
*     JSB R/W$
*     JMP DERR      ERROR RETURN (A = -1) 
*                   NORMAL RETURN 
* 
R/W$  NOP 
      STB RC        SAVE THE DCB ADDRESS
      ADB .7        INDEX TO THE BLOCK SIZE 
      LDA B,I       FETCH THE BLOCK SIZE
      AND BLMSK     MASK TO BITS 7-14 
      STB WOFLG     SAVE ADDRESS OF THIS WORD 
      ADB .9        INDEX TO DCB BUFFER 
      STB BUFA      SAVE IT'S ADDRESS 
      LDB WOFLG,I   GET WORD WITH WRITTEN ON FLAG 
      SEZ,SLB,RSS    CHECK READ\WRITE CODE AND WRITTEN-ON FLAG
      JMP EXIT       JUMP IF WRITE AND WRITTEN ON FLAG NOT SET
      LDB RC        GET THE DCB ADDRESS 
      JSB D$XFR     DO THE TRANSFER 
BUFA  NOP 
      JMP R/W$,I    ERROR - RETURN
      LDB WOFLG,I   GET THE WRITTEN-ON FLAG 
      LDA RC        GET WRITE OR READ REQUEST CODE
      CCE,SLA,RSS   FOR WRITE CALL WANT TO CLEAR EOF
      CLE            WRITTEN-ON FLAG AND IN-CORE FLAG 
EXIT  RBR,RBR         FOR READ CALL WANT TO CLEAR EOF AND 
      RBR              WRITTEN ON FLAG AND SET
      ELB,CLE,ELB       IN CORE FLAG. 
      CLE,ELB       IF SKIPPED D$XFR (JMP EXIT) JUMPING 
      STB WOFLG,I    WITH E=0, B=WOFLG,I.  WANT TO
      ISZ R/W$        CLEAR BOTH WRITTEN-ON AND 
      JMP R/W$,I       IN CORE FLAGS. 
      SPC 2 
.2    DEC 2 
.7    DEC 7 
.8    DEC 8 
.9    DEC 9 
* 
RC    NOP 
TRACK NOP           AT TRACK          MUST BE TOGETHER
SECT  NOP           AND SECTOR        IN THIS ORDER 
LU    NOP 
WOFLG NOP 
* 
B77   OCT 77
BLMSK OCT 77600 
* 
* 
*     DISC TRANSFER CALL SEQUENCE 
* 
*     E=0  FOR WRITE
*     E=1  FOR READ 
*     B=  DCB ADDRESS 
*     A=  LENGTH (NO. OF WORDS) 
*     JSB D$XFR     CALL TO HERE
*     DEF BUFR      BUFFER ADDRESS (MUST BE DIRECT) 
*     JMP ERR       ERROR RETURN  (A=-1)
*     NORMAL RETURN 
      SPC 2 
D$XFR NOP           ENTRY POINT 
      STA LSAVE     SAVE LENGTH 
      CLA,SEZ,INA,RSS  SET UP THE REQUEST CODE
      INA               AND 
      STA RC              SET IT
      LDA B,I       CONFIGURE THE CON WORD
      AND B77 
      ADA PRC 
      STA LU
      ADB .8        GET THE NUMBER OF SECTORS PER TRACK 
      STB #SC/T     ADDRESS AND SAVE IT 
      ADB .2        GET THE TRACK ADDRESS 
      DLD B,I       AND 
      DST TRACK     SAVE IT 
      LDA D$XFR,I   GET THE BUFFER ADDRESS
      STA BUF       SAVE IT 
      ISZ D$XFR     STEP TO ERROR RETURN ADDRESS
      LDA B         GET THE SECTOR ADDRESS TO A 
      CMA,INA       SET NEGATIVE AND
NXTR  ADA #SC/T,I   CACULATE NUMBER OF WORDS LEFT ON THIS 
      ASL 6         ON THIS TRACK 
      STA #WORD     SET FOR TRANSFER
      CMA,INA       SET MAX COUNT NEGATIVE
      LDB LSAVE     GET REMAINING COUNT 
      ADA B         AND SUBTRACT
      SSA           IF LESS THAN REST OF TRACK
      STB #WORD      RESET COUNT TO RIGHT NUMBER
      STA LSAVE     SET REMAING WORDS FOR NEXT TIME 
      JSB EXEC      CALL EXEC TO
      DEF ERTS
      DEF RC        WRITE/READ
      DEF LU        FROM THE DISC 
BUF   NOP           AT THE SPECIFIED BUFFER 
      DEF #WORD     SIZE
      DEF TRACK     TRACK AND 
      DEF SECT       SECTOR 
ERTS  CCA           SET UP FOR ERROR EXIT 
      CPB #WORD     ERROR?
      CLA,RSS       NO ERROR SKIP 
      JMP D$XFR,I   ERROR RETURN
      ADB BUF       UP DATE THE BUFFER
      STB BUF       ADDRESS 
      STA SECT      SET THE SECTOR ADDRESS FOR NEW TRACK
      ISZ TRACK     STEP THE TRACK ADDRESS
      LDB LSAVE     GET THE REMAINING LENGTH
      CMB,SSB,INB,SZB CHECK IF ANY LEFT 
      JMP NXTR      NO CONTINUE XFER
      ISZ D$XFR     END SO
      JMP D$XFR,I   MAKE THE NORMAL RETURN
      SPC 2 
LSAVE NOP 
#SC/T NOP 
#WORD NOP 
A     EQU 0 
B     EQU 1 
      UNL 
PRC   OCT 74000 
      LST 
D.R   ASC 3,D.RTR 
      SPC 1 
END   EQU * 
      SPC 1 
      END 
                                                        