ASMB,R,L,C,F
      HED BASIC 7970 DEVICE SUBROUTINE        92101-19014 REV. 1805 
      NAM MTTDR,7 92101-16014 REV. 1805 771220
* 
* 
* 
* 
      ENT MTTRD,MTTRT,MTTPT,MTTFS 
* 
* 
***************************************************** 
* 
*         RELOC. TAPE:       92101-16014
*         LISTING:         92101-19014
*         SOURCE TAPE:       92101-18014
* 
******************************************************* 
* 
* 
*          *****EXTERNAL SYMBOLS***** 
* 
*            **UTILITY ROUTINES** 
* 
      EXT .ENTR,ERROR,EXEC,.STOP
* 
* 
* 
* 
* 
* 
* 
* 
      SUP PRESS LISTING 
      SKP 
* 
*         **ENTRY FORMATS AND FUNCTIONS** 
* 
*           MTTRD(IUNIT,FPVAR,NI,IEOF,NT) 
*           MTTRT(IUNIT,FPVAR,NI,IEOF,NT) 
*               IUNIT=MAG TAPE LOGICAL UNIT NUMBER
*               FPVAR=FIRST VARIABLE OF ARRAY ELEMENT 
*                       TO BE TRANSFERRED TO/FROM CORE
*               NI=NO. OF VARIABLES TO BE TRANSFERRED 
*               IEOF=END OF FILE FLAG RETURNED BY DRIVER
*                    0=NO END OF FILE 
*                    1=END OF FILE
*               NT=ACTUAL  NO. OF VARIABLES TRANSFERRED 
* 
*          MTTPT(IUNIT,IF,IR) 
*               IF=FILE SPACING PARAMETERS
*                  +IF=FORWARD IF FILES 
*                  -IF=BACKWARD IF FILES
*               IR=RECORD SPACING PARAMETER 
*                  +IR=FORWARD IR RECORDS 
*                  -IR=BACKWARD IR RECORDS
* 
*          MTTFS(IUNIT,FUNC)
*               FUNC=TAPE FUNCTION
*                  0=GAP
*                  1=END OF FILE AND GAP
*                  2=REWIND 
*                  3=REWIND/STANDBY 
* 
*      FPVAR IS A FLOATING POINT PARAMETER, ALL OTHER 
*      PARAMETERS ARE INTEGER. CONVERSION WORDS MUST
*      BE INCLUDED IN BRANCH TABLE
* 
      HED READ AND WRITE FUNCTIONS          A-92101-16014-1 REV. A
* 
MTTRT NOP           WRITE ENTRY 
      LDB .2          SET ENTRY FLAG
      STB STAT        SAVE TEMPORARILY
      LDB MTTRT 
      STB MTTRD 
      JMP MTTRD+1        JUMP TO PSEUDO ENTRY 
      SPC 2 
UNIT  BSS 1 
VAR   BSS 1 
NI    BSS 1 
EOF   BSS 1 
NT    BSS 1 
* 
MTTRD  NOP           READ ENTRY 
      JSB .ENTR 
      DEF UNIT
      LDB STAT     GET ENTRY FLAG 
      CPB .2       WRITE? 
      RSS          YES. 
      CLB,INB      NO,READ
      STB CMDC     SET COMMAND CODE 
* 
      LDA UNIT,I
      IOR COMWD 
      STA CONWD 
      LDB CMDC        WRITE?
      SLB 
      JMP MT1 
      JSB STAT      READ STATUS 
      AND .4          YES!
      SZA             WRITE RING? 
      JMP REJ         NO! 
MT1   STA STAT      CLEAR ENTRY FLAG
      LDA NI,I       CONVERT NO. OF VARIABLES 
      STA NT,I
      ALS               TO
      STA NII             WORDS 
      LDB VAR 
      STB VARA        SET UP READ/WRITE ADDRESS 
      ADB NII 
      ADB M2
      STB BFLAG 
      DLD BFLAG,I    LOAD LAST VARIABLE 
      DST BFLAG,I    ATTEMPT TO RESTORE 
      CLB 
      STB EOF,I      ZERO EOF FLAG
      JSB EXEC       MAG TAPE REQUEST 
      DEF *+5 
      DEF CMDC
      DEF CONWD 
VARA  DEF * 
      DEF NII 
      STA STAT1     SAVE STATUS 
      BRS            CONVERT WORDS TO NO. OF
      SSB 
      CMB,INB           VARIABLES TRANSFERED
      LDA CMDC         IS THIS AREAD OR A WRITE?
      SLA,RSS 
      JMP MTTRD,I      WRITE! SO RETURN 
      STB NT,I         SAVE NO. OF VARIABLES TRNSFD 
      LDA STAT1     GET STATUS
      AND B200
      SZA              EOF ENCOUNTERED ON A READ? 
      JMP EOFT         YES! 
      JMP MTTRD,I      RETURN 
* 
* 
EOFT  CLA,INA        TURN ON EOF FLAG 
      STA EOF,I 
      JMP MTTRD,I   RETURN
      SKP 
      HED POSITION CONTROL                  A-92101-16014-1 REV. A
      SPC 2 
UNITP NOP 
FPOS  NOP 
RPOS  NOP 
      SPC 1 
MTTPT NOP 
      JSB .ENTR 
      DEF UNITP 
      LDB FPOS,I     FILE POSITION COUNT
      SZB,RSS        IF ZERO GOTO RECORD SKIP 
      JMP RC1 
      SSB            FORWARD OR BACK? 
      JMP BACKF      BACK!
      CMB,INB 
      LDA B1300      FORWARDSPACE FILE
FILE  JSB SKIP       SKIP FILE
RC1   LDB RPOS,I     RECORD POSITION COUNT
      SZB,RSS        IF ZERO RETURN 
      JMP MTTPT,I 
      SSB            FORWARD OR BACK? 
      JMP BACKR      BACK!
      CMB,INB 
      LDA B300       FORWARD RECORD 
RCRD  JSB SKIP       SKIP RECORDS 
      JMP MTTPT,I    RETURN 
* 
BACKF LDA B1400      BACKFILE 
      STA BFLAG      SET BACK MOTION FLAG 
      JMP FILE
* 
BACKR LDA B200       BACK RECORD
      STA BFLAG      SET BACK MOTION FLAG 
      JMP RCRD
* 
      SPC 2 
* 
*  SKIP RECORD OR FILE
* 
* ON ENTRY A=CONWD, B=COUNT 
* 
SKIP  NOP 
      IOR UNITP,I    STUFF IN LOG UNIT
      STA CONWD 
      STB COUNT 
SKIP1 JSB EXEC       SKIP A RECORD OR A FILE
      DEF *+3 
      DEF .3
      DEF CONWD 
      ISZ COUNT      DECREMENT COUNT AND SKIP IF DONE 
      JMP SKIP1      NOT DONE YET!
      CLA 
      STA BFLAG      CLEAR BACK MOTION FLAG 
      JMP SKIP,I     RETURN 
      SKP 
BEOT1 LDA .2         ILLEGAL REQUEST ERROR
      JMP ERR 
* 
REJ   LDA .3         NO WRITE RING ERROR
      JMP ERR 
      SPC 5 
* 
* READ STATUS OF UNIT 
* 
STAT  NOP 
      LDA UNIT,I    CREATE CONTROL
      IOR =B600       CODE FOR
      STA CNTRL         GETTING DYNAMIC STATUS
      JSB EXEC
      DEF *+3 
      DEF .3
      DEF CNTRL 
      JMP STAT,I
* 
CNTRL BSS 1 
      SKP 
      HED ERROR MESSAGE PROCESSOR           A-92101-16014-1 REV. A
      SPC 3 
* 
* ERROR MESSAGE PROCESSOR 
* 
*    ON ENTRY A = 1   NO LOGICAL UNIT FOUND 
*                 2   ILLEGAL TAPE MOTION REQUEST 
*                 3   NO WRITE RING 
* 
*    ERROR MESSAGE IS OF THE FORMAT:
* 
*        ERROR MAGTP-X IN LINE NN 
* 
*            WHERE X IS DESCRIBED ABOVE 
*                  NN IS THE LINE NO. WHERE THE ERROR OCCURRED
* 
* 
ERR   STA CODE
      JSB ERROR      OUTPUT ERROR MESSAGE 
      DEF *+3 
      DEF CODE
      DEF MGTPA 
      JSB .STOP     TERMINATE EXECUTION OF PROGRAM
* 
* 
      SKP 
      HED CONTROL FUNCTIONS                 A-92101-16014-1 REV. A
UNITF NOP 
FUNC  NOP 
      SPC 1 
MTTFS NOP 
      JSB .ENTR      TRANSFER ARG ADDR
      DEF UNITF 
      LDA FUNC,I     FUNCTION CODE
      ADA M4
      SSA,RSS 
      JMP BEOT1      BAD REQUES!
      LDA FUNC,I
      ADA FUNCA      ADD IN ADDRESS OF FUNCTION LIST
      LDA 0,I        GET FUNCTION CODE FOR EXEC 
      IOR UNITF,I    OR IN LU # 
      STA CONWD      PUT IN EXEC REQUEST
      JSB EXEC       PERFORM FUNCTION 
      DEF *+3 
      DEF .3
      DEF CONWD 
      JMP MTTFS,I    RETURN 
* 
      HED CONSTANTS AND STORAGE             A-92101-16014-1 REV. A
CMDC  OCT 0           COMMAND CODE
NII   OCT 0           NO. OF WORDS IN TRANSFER
CONWD OCT 0           EXEC CONTROL WORD 
B1300 OCT 1300
B300  OCT 300 
COUNT OCT 0           FILE/RECORD COUNTER 
STAT1 OCT 0           STATUS WORD 
FUNCA DEF *+1         ADDRESS OF FUNCTION CNTRL WORDS 
      OCT 1200
COMWD OCT 100         READ/WRITE CONTROL WORD 
      OCT 400 
      OCT 500 
MGTPA DEC 5           MAG TAPE MESSAGE
      ASC 3,MAGTP 
CODE  OCT 0           ERROR CODE NO.
BFLAG OCT 0           BACK MOTION FLAG
B1400 OCT 1400
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
M2    DEC -2
M4    DEC -4
B200  OCT 200 
      END 
                                                                                                                                                                                      