ASMB,R,L,C
*     NAME:   R/W$
*     SOURCE: 92070-18070 
*     RELOC:  92070-16070 
*     PGMR:   G.A.A.
*     MOD:    M.L.K.
* 
*  ***************************************************************
*  * (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  92070-1X070  REV.1941  790709 
* 
      HED R/W$
      ENT R/W$
      ENT D$XFR 
      EXT EXEC
      SUP 
* 
*  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
      ARS,ALR       CLEAR THE LEAST AND SIGN BITS 
      ADB .6        INDEX TO THE WRITTEN ON FLAG
      STB WOFLG     SAVE ITS ADDRESS
      ADB .3        INDEX TO THE BUFFER ADDRESS 
      STB BUFA      SET IN CALL 
      LDB WOFLG,I   GET THE WRITTEN ON FLAG 
      SEZ,SLB,RSS    IF NOT WRITTEN ON (SKIP ON READ) 
      JMP EXIT       EXIT 
      LDB RC        GET THE DCB ADDRESS 
      JSB D$XFR     DO THE TRANSFER 
BUFA  NOP 
      JMP R/W$,I    ERROR - RETURN
      LDB RC        GET THE REQUEST CODE
      CCE,SLB,RSS   IF THIS IS A WRITE CALL 
EXIT  CLA,CLE       CLEAR THE IN CORE FLAGS 
      ERA,ALS       CLEAR WRITTEN ON FLAG AND SET IF READ 
      STA WOFLG,I   RESET 
      ISZ R/W$      TAKE OK 
      JMP R/W$,I    EXIT
      SPC 2 
.3    DEC 3 
.6    DEC 6 
.7    DEC 7 
.10   DEC 10
RC    NOP 
TRACK NOP           \AT TRACK  (LEAVE IN THIS ORDER)
SECT  NOP           /AND SECTOR 
LU    NOP 
WOFLG NOP 
B77   OCT 77
B7700 OCT 7700
      SKP 
*     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 #WORD     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       GET LU FROM DCB 1 
      ADA B7700     ADD PROTECT BITS
      STA LU        SAVE THE LU 
      ADB .10       GET THE NUMBER OF SECTORS PER TRACK 
      DLD B,I       AND SECTOR ADDRESS THEN 
      DST TRACK     SAVE IT 
      LDA D$XFR,I   GET THE BUFFER ADDRESS
      STA BUF       SAVE IT 
      ISZ D$XFR     STEP TO ERROR RETURN ADDRESS
      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
      ISZ D$XFR     END SO
      JMP D$XFR,I   MAKE THE NORMAL RETURN
      SPC 2 
#SC/T NOP           ADDRESS OF # OF SECTORS/TRACK 
#WORD NOP           NUMBER OF WORDS TO TRANSFER 
A     EQU 0 
B     EQU 1 
END   EQU * 
      SPC 1 
      END 
                                                                                                                    