* 
      ASC 2,RTN 
      ASC 1,
      DEF RTP 
* 
      ASC 2,MSG 
      ASC 1,A 
      DEF MSP 
* 
      ASC 2,DLY 
      ASC 1,I 
      DEF DTP 
* 
      ASC 2,TEST
      ASC 1,K 
      DEF TEP 
* 
      ASC 2,STOP
      ASC 1,
      DEF PSTOP 
* 
      DEC -2
* 
OPEND EQU * 
      SKP 
      ORG 1760B 
.5    OCT 5 
.6    OCT 6 
.177  OCT 177 
.D72  DEC 72
.M1   DEC -1
.M2   DEC -2
.M3   DEC -3
.M4   DEC -4
.M10  DEC -10 
.M60  OCT -60 
DBC   NOP 
CULN  NOP 
* 
* 
TMP   NOP           LINE NUMBER 
      NOP           POINTER TO STATEMENT TABLE
      NOP           PRAM A
      NOP           PRAM B
      HED           7970 (13181-13183) TAPE DIAGNOSTIC
*         REVISION DATE 06/15/76
*  SETUP: 
* 
*    1. LOAD DIAGNOSTIC CONFIGURATOR
* 
*    2. LOAD THE 7970 MAG TAPE DIAGNOSTIC 
* 
*    3. SET P TO 100
* 
*    4. LOAD THE SWITCH REGISTER ACCORDING TO THE TABLE BELOW:
* 
*    SWITCH REG    SPEED /INTERFACE 
*         15             45 
*         14             37.5 
*         13             25 
*         12             12.5 
*         11             13183
*         10             13181
*          9             NON DMA FOR 13183
*          8-6           NOT USED 
*          5-0           SELECT CODE
* 
*    5. PRESS PRESET; PRESS RUN 
* 
*    6. IF HALT 102074, GO TO STEP 7. 
* 
*    7. LOAD SWITCH REGISTER WITH OPTIONS ACCORDING TO
*       TABLE BELOW:
* 
*     THE FOLLOWING SWITCH REGISTER SETTINGS ARE USED 
*     FOR PROGRAM CONTROL:
* 
*     SWITCH       MEANING IF SET 
*      0           USE MAGNETIC TAPE UNIT 0 
*      1           USE MAGNETIC TAPE UNIT 1 
*      2           USE MAGNETIC TAPE UNIT 2 
*      3           USE MAGNETIC TAPE UNIT 3 
*      4           USE DMA CHANNEL 1 ON ALL READ/WRITE
*      5           USE DMA CHANNEL 2 ON ALL READ/WRITE
*      6           INHIBIT ALL TESTS WITH EMBEDDED REWINDS
*      7           DELETE CRCC AND LRCC CHECK (13181) 
*      8           SUPPRESS TEST WHICH REQUIRE OPERATOR 
*      9           ABORT
*     10           SUPPRESS NON-ERROR MESSAGES
*     11           SUPPRESS ERROR MESSAGES
*     12           LOOP ON DIAGNOSTIC 
*     13           LOOP ON LAST TEST
*     14           SUPPRESSES ERROR HALTS 
*     15           HALT AT END OF EACH TEST(102076) 
* 
* 
* 
*    8. PRESS PRESET; AND RUN 
* 
*    ERROR HALTS/NORMAL HALTS 
*         102075    HALT AFTER SETTING SWITCH 9 
*         102073    BAD SELECT CODE-GOTO STEP 4 
*         102072    BAD TAPE OPTIONS-GOTO STEP 4
*         102070    P-100 ENTRY IN 8K MODE
*         102071    NO DMA FOR 13183-GOTO STEP 4
*         106077    BAD INTERRUPT TRAP CELL-RELOAD GOTO STEP 1
*         102077    END OF PASS 
*         102076    HALT AT END OF TEST 
* 
* 
* 
      ORG PGO       SETUP OVERLAY PRIOR TO OPDSN
      JSB OPSET,I 
      ORG CMDL      COMMAND OVERLAY FOR OPDSN 
      JSB PCMND,I   OVERLAY FOR OP DESIGN 
* 
      ORG 2000B 
.BEGN EQU *         BEGIN THE DIAGNOSTIC
      JSB SETUP,I 
      ORG 100B
      JMP START,I   GO TO CONFIGURATION 
      ORG 126B
DSN   OCT 112100    DIAGNOSTIC SERIAL NUMBER
      ORG 133B
      DEF .ERMS     OVERLAY ERROR MESSAGE POINTER 
      ORG 140B
IOIP  DEF IOID      POINTER TO I/O LIST (COMMAND CH)
IOIP2 DEF IOID2     POINTER TO I/O LIST (DATA CH) 
TSTP  DEF TSTD      POINTER TO TESTS
STDA  OCT 177777    STD. TESTS O-15 
STDB  OCT 007777    STD. TEST 16-27 
HDMP  DEF HDMS1     POINTER TO HEADER MESSAGE 
SWRC  DEF .SWRG 
      ORG 150B
* 
STATU NOP           CURRENT TAPE UNIT STATUS
SUBTS NOP           CURRENT SUBTEST NUMBER
UNIT  NOP           CURRENT TAPE UNIT NUMBER
OCMD4 NOP           LAST EXECUTED COMMAND 
EXPST NOP           EXPECTED STATUS 
RECNO NOP           #OF RECORDS FROM BOT
* 
* 
*                   LIST OF POINTERS
* 
.TST0 DEF TST00     POINTER TO TEST ZERO (TST00)
.ZBIO DEF ZBIO      POINTER TO START OF BASIC I/O 
.EXEC DEF EXE01     POINT TO EXECUTIVE EXTENSION MOD
MS    DEF MSG       NON ERROR MESSAGE REPORTING 
.ZERM DEF ZERMS     POINTER TO ERROR MESSAGE
.FMT3 DEF FMT03     POINTER TO FORMATTER SPECIAL
SIOR  DEF SIOTR     POINTER TO SIO READ ROUTINE 
SIOW  DEF SIOTW     POINTER TO SIO WRITE ROUTINE
FILL  DEF .FILL     POINTER TO FILL BUFFER ROUTINE
READ  DEF .READ     POINTER TO READ ROUTINE 
.RDGP DEF RDGAP     POINTER TO READ GAP SPACE ROUTINE 
.DMUP DEF DMAUP     POINTER TO DMA SETUP ROUTINE
DMAWT DEF .DMWT     POINTER TO DMA WRITE ROUTINE
DMARD DEF .DMRD     POINTER TO DMA READ  ROUTINE
LONGW DEF .LONG     POINTER TO SUBROUTINE LONGW 
LONGR DEF .LONR     POINTER TO SUBROUTINE LONGR 
.RD10 DEF RD10      POINTER TO READ COMMAND CHANGE
.CLBF DEF CLRBF     POINTER TO ROUTINE CLRBF
.RWSL DEF RWSLO     POINTER SLOW REWIND ROUTINE 
.ALCP DEF ALLCP     POINTER TO ALL UNIT COMPARE ROUTINE 
.ALRW DEF ALLRW     POINTER TO ALL UNIT REWIND ROUTINE
.ALWR DEF ALLWR     POINTER TO ALL UNIT WRITE ROUTINE 
.ALBS DEF ALLBS     POINTER TO ALL UNIT BACKSPACE 
START DEF .STAR     POINTER TO START OF CONFIGURATION 
BEGIN DEF .BEGN     POINTER TO START OF DIAGNOSTIC
SCIN  DEF ZISC      POINTER TO I/O SETUP ROUTINE
.WCC  DEF WCC       POINTER TO WCC COMMAND
.RRF  DEF RRF       POINTER TO RRF COMMAND
SETUP DEF .SETU     POINTER TO 2000 OCTAL CONFIG. 
.LRCC DEF LRCC      POINTER TO LRCC ROUTINE 
.CRCC DEF CRCC      POINTER TO CRCC ROUTINE 
..TIM DEF .TIME     POINTER TO TIME CONTSTANTS
.PRIT DEF PARIT     POINTER TO PARITY ROUTINE 
DCODE DEF .DCOD     UPDATES RECORD COUNT
.CKIN DEF CKIN      POINTER TO CKIN 
.CKOT DEF CKOUT     POINTER TO CKOUT
.CMPQ DEF COMPQ     POINTER TO COMPQ
.ZUSR DEF ZUSR
      NOP 
* 
* 
* 
* 
*         LINKS TO OPERATOR DESIGN  *********************** 
* 
OPSET DEF .OPST     POINTER TO PODSN SETUP
.IRQ  DEF IRQ       POINTER TO INPUT REQUEST
.SNTX DEF SYNTX     PRE-PROCESSOR FOR STATEMENTS. 
.END  OCT 3777      END OF PROGRAM AREA 
SUPA  DEF ZCEND     START OF USER TABLE 
EUPA  EQU .END      END OF USER PROGRAM AREA
STUD  DEF STUDD     START OF USER STATEMENT TABLE 
DBD   EQU FWAM      START OF USER BUFFER
CNT01 NOP           COUNTER FOR OPERATOR DESIGN 
.OPLN DEF OPLNE     POINTER TO LINE MISSING ROUTINE 
FMTR2 DEF .FMTR     POINTER TO FORMATTER
PCMND DEF .PCMD     POINTER TO PROG EXTENSION 
* 
* 
* 
*         LINKS TO INTERRUPT ROUTINES 
* 
INTJP DEF TCJMP     POINTER TO LOAD TRAP WITH JMP 
INTJB DEF TCJSB     POINTER TO LOAD TRAP WITH JSB 
JMPI  JMP *+1,I     JMP INSTRUCTION 
JMPIL NOP           JUMP OR JSB DESTINATION 
JSBI  JSB JMPIL,I   JSB INSTRUCTION 
INTON DEF .INTN     POINTER TO INTERRUPT TURN ON
INTOF DEF .INTF     POINTER TO INTERRUPT TURN OFF 
LDINT DEF .LDIT     POINTER TO LOAD TRAP WITH ERROR MESSAGES
TCCMD NOP           INTERRUPT LINK TO COMMAND CH
TCDAT NOP           INTERRUPT LINK TO DATA CH 
TCDA1 NOP           INTERRUPT LINK TO DMA CH 1
TCDA2 NOP           INTERRUPT LINK TO DMA CH 2
.ZTCH DEF ZITCH     OPDSN-PUTS HALTS IN TRAP CELLS
* 
* 
* 
* 
*         CONSTANTS AND STORAGE 
* 
*                   PAGING CONSTANTS FOR ORG-S
* 
PAG06 EQU OPEND 
PAG10 EQU 10000B
PAG12 EQU 12000B
PAG14 EQU 14000B
PAG16 EQU 16000B
* 
SC    NOP           CURRENT SELECT CODE 
DATA  EQU 10B       LOAD DUMMY SELECT CODE IN DATA CHANNEL
CMMD  EQU DATA+1    LOAD DUMMY SELECT CODE INTO COMMAND CHANNEL 
* 
*                   SWITCH REGISTER MASKS 
SWALL OCT 17
*                   SWITCH REGISTER MASKS 
* 
SW00  OCT 1         BIT 0 
SW01  OCT 2         BIT 1 
SW02  OCT 4         BIT 2 
SW03  OCT 10        BIT 3 
SW04  OCT 20        BIT 4 
SW05  OCT 40        BIT 5 
SW06  OCT 100       BIT 6 
SW07  OCT 200       BIT 7 
SW08  OCT 400       BIT 8 
SW09  OCT 1000      BIT 9 
SW10  OCT 2000      BIT 10
SW11  OCT 4000      BIT 11
SW12  OCT 10000     BIT 12
SW13  OCT 20000     BIT 13
SW14  OCT 40000     BIT 14
SW15  OCT 100000    BIT 15
SW68  OCT 10500     BIT 6,8,AND 12
* 
*                  BASE PAGE VARIABLES
* 
TMP1  NOP 
TMP2  NOP 
DMAFG NOP           DMA CHANNEL FLAG
FGDMA NOP           FLAG FOR DMA READ OR WRITE
* 
BREG  NOP           B REG CONTENTS
AREG  NOP           A REG CONTENTS
DTA   NOP           LOCATION OF DATA CHANNEL SC 
CMD   NOP           LOCATION OF COMMAND CHANNEL SC
ORGSC NOP 
FG183 NOP           IF FG183=0,THEN IT IS 13181 
*                   IF FG183=-1,THEN IS 13183 DIAG. 
FGINT NOP           INTERRUPT FLAG
INTFG NOP           TEMPORARY INTERRUPT FLAG
TST0F NOP           TEST 0 FLAG- -1=IN TEST 0 
* 
* 
CNTR  NOP 
COUNT NOP           BUFFER LENGTH COUNTER 
DBCI  NOP           INPUT BUFFER LENGTH 
DBDI  NOP           INPUT BUFFER ADDRESS
* 
BUFLG EQU DBC       BUFFER LENGTH 
INBUF EQU DBDI      INPUT BUFFER ADDRESS
INBFL EQU DBCI      LENGTH OF INPUT BUFFER
RDERR NOP           READ ERROR FLAG (CONTENTS= STATUS)
WRERR NOP           WRITE ERROR FLAG (CONTENTS= STATUS) 
.RDCT NOP 
.RDTP NOP           TEMPORARY STORAGE 
BFMAX NOP           MAX BUFFER SIZE 
DBCO  EQU BFMAX 
DMASK NOP           DMA MASK FOR INPUT BUFFER LENGTH
OLDTN NOP           OLD TEST NUMBER 
DTIME NOP           TIME FOR DMA FLAG TO SET
CRCFG NOP           CRCC SKIP FLAG
INSWR NOP           INTERNAL SWITCH REG.-TEST 30
ERSKP NOP           ERROR MESSAGE SKIP FLAG 
SKPSW NOP           SKIP SWITCH REGISTER CHECK FLAG 
* 
*                   NUMERICAL CONSTANTS 
* 
.1    OCT 1 
.7    OCT 7 
.09D  DEC 9 
.10   OCT 10
.17   OCT 17
.37   OCT 37
.77   OCT 77
.100  OCT 100 
.100D DEC 100 
.200  OCT 200 
.M6   OCT -6
.N100 OCT -100
.PAGE DEC 1024
.MPAG DEC -1024     PAGE LENGTH CONSTANTS 
.ME3  DEC -1000 
* 
*     COMMAND  SET FOR 13183 INTERFACE
ATSEL DEF *+1       ADDRESS OF SELECT COMMANDS
SL0   OCT 1400      SELECT UNIT ZERO
SL1   OCT 2400      SELECT UNIT 1 
SL2   OCT 4400      SELECT UNIT 2 
SL3   OCT 10400     SELECT UNIT 3 
WCC   OCT 31        WRITE COMMAND 
WFM   OCT 211       WRITE FILE MARK 
RRF   OCT 23        READ RECORD FORWARD 
FSR   OCT 3         FORWARD SPACE RECORD
FSF   OCT 203       FORWARD SPACE FILE
GAP   OCT 15        WRITE GAP 
BSR   OCT 41        BACKSPACE RECORD
BSF   OCT 241       BACKSPACE FILE
REW   OCT 101       REWIND
RWO   OCT 105       REWIND OFF-LINE 
CLR   OCT 110       CLEAR CONTROLLER
GFM   OCT 215       GAP FILE MARK 
RFF   OCT 223       READ FORWARD UNTIL NEXT FILE MARK 
RRR   OCT 61        READ RECORD IN REVERSE
* 
* 
*     INSTRUCTION LIST
* 
.LDB  LDB A         POINTER TO LDB INSTRUCTION
* 
*     STATUS WORD BIT MASKS 
* 
MSKOL OCT 1         OFFLINE 
MSKDE OCT 2         DATA ERROR
MSKFP OCT 4         FILE PROTECTED
MSKCR OCT 10        CMMD REJECT 
MSKTE OCT 20        TIMING ERROR
MSKET OCT 40        EOT 
MSKLP OCT 100       LOAD POINT
MSKEF OCT 200       END OF FILE 
MSKIB OCT 400       INTERFACE BUSY
MSKTB OCT 1000      TAPE UNIT BUSY
MSKRW OCT 2000      REWINDING 
MSKOB OCT 4000      ODD BYTE
MSKST OCT 10000     SINGLE TRACK ERROR
MSKDN OCT 100000    DENSITY 
MSKSL OCT 60000     SEL. TAPE UNIT BITS 13+14 
MK377 OCT 377       MASK FOR BITS 7-0 
MK77K OCT 77400     MASK FOR BITS 14-8
MSK77 OCT 77777 
MASK  NOP           TEMPORARY MASK
MSKIO OCT 4033      OB,TE,DE,OL,CR CHECK MASK 
MSKCL OCT 14632     BITS CLEARED BY CLEAR COMMAND 
MSKDT OCT 22        DATA AND TIMING ERROR MASK
MSKRT OCT 3000      REWIND AND TAPE BUSY MASK 
.2    EQU SW01
.3    EQU FSR 
.4    EQU SW02
.15   EQU GAP 
SW9   EQU SW09
S128  EQU SL3 
* 
* 
*            EQUIPMENT TABLE (EQT)
* 
UNICT NOP           CURRENT UNIT
UNITS NOP           # OF UNITS ON-LINE
UNITX NOP           TEMPORARY UNIT NUMBER 
* 
*         TIME DELAY TABLE
* 
TIME  DEF *+1 
RWTIM DEC 1         REWIND RESET TIME-45IPS 
WRTIM DEC 8         WRITE STARTUP- 45IPS
CLTIM DEC 10        MAXIMUM CLEAR TIME
GAPTM DEC 96        GAP TIME
IGTIM DEC 9         IRG TIME
MINBY DEC 13        MINIMUM BYTE TIME (100 WORDS) 
MAXBY DEC 16        MAXIMUM BYTE TIME (100 WORDS) 
DELTA NOP           DELTA TIME CONSTANT-MAX TIME
* 
* 
*         COMMONLY USED SUBROUTINES 
* 
* 
*                   CHECK TO SEE THAT AT LEAST ONE UNIT ON-LINE 
*                   REPORTS ERROR IF NO UNITS ARE ON-LINE 
*                   COUNTS UP # OF UNITS ONLINE 
*                   AND UPDATES EQT.
*CALL:
*     JSB UNIUP 
*     <NORMAL RETURN> 
* 
UNIUP NOP 
UNIU1 EQU * 
      CLA           SELECT UNIT ZERO
      STA UNITS     CLEAR UNITS COUNTER 
      JSB UPDAT     UPDATE EQT
      LDA .1
      JSB UPDAT     SELECT UNIT 1 
      LDA .2
      JSB UPDAT     SELECT UNIT 2 
      LDA .3
      JSB UPDAT     SELECT UNIT 3 
      LDA UNITS     GET THE # OF UNITS ON-LINE
      SZA           IF ZERO UNITS-REPORT ERROR
UNIU2 EQU *         ON-LINE 
      JMP UNIUP,I   EXIT
UNIU5 EQU *         ERROR- ALL UNITS ARE OFF-LINE 
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    REPORT ERROR
      DEF E032
      JMP UNIU1     GO TRY AGAIN
E032  EQU * 
      ASC 09,E032 NO UNITS UP/
* 
*                   UPDAT-UPDATES EQT 
* 
UPDAT NOP 
      JSB UNISL     GO SELECT TAPE UNIT 
      JMP UNIU8     OFF-LINE RETURN 
      JMP UNIU7     ON-LINE RETURN
UNIU7 EQU * 
      ISZ UNITS     INCREMENT # OF UNITS ONLINE 
UNIU8 EQU * 
      JMP UPDAT,I   EXIT
* 
* 
*         CLRCH-    CLEARS DATA AND COMMAND CHANNELS
* 
*CALL:
*     JSB CLRCH 
*     <NORMAL RETURN> 
* 
CLRCH NOP 
CLRC1 CLC DATA,C
CLRC2 CLC CMMD,C
      CLC CHAN+4,C  CLEAR DMA CHANNELS
      STF CHAN+4
      CLC CHAN+5,C
      STF CHAN+5
      JMP CLRCH,I 
* 
* 
*         AOTA-  OTA ON COMMAND CHANNEL 
*           LOAD A REGISTER WITH THE COMMAND
*CALL:
*     LDA <COMMAND IE.BSR>
*     JSB AOTA
*     <NORMAL RETURN
*      .
*      .
AOTA  EQU * 
      NOP 
      STA OCMD4     SAVE COMMAND
AOTA1 OTA CMMD      OUTPUT THE COMMAND
      JMP AOTA,I    EXIT
* 
* 
*         EFCK -    CHECKS IF EF BIT SET
*                   IF BIT RESET,THEN AN ERROR MESSAGE RESULTS. 
*CALL:
*     JSB EFCK
*     <NORMAL RETURN> 
* 
EFCK  NOP 
      LDA MSKEF 
      JSB BITCK     CHECK FOR EF
      JMP EFCK1     YES-EXIT
      LDB MSKEF     SETUP EXPECTED STATUS 
      JSB ERMS,I    NO-REPORT ERROR 
      DEF E053
      JMP EFCK1 
E053  EQU * 
      ASC 11,E053 FILE MARK ERROR/
EFCK1 JMP EFCK,I         EXIT 
* 
* 
OCMMD NOP           COMMD SHOULD BE IN THE 'B' REG. 
      STB OCMD4     SAVE COMMAND
OCMD1 OTB CMMD
* 
*                   CHECK FOR COMMAND REJECT BIT SET
* 
      JSB STATS     GET STATUS
      AND MSKCR     IS COMMAND REJECT BIT SET 
      SZA,RSS 
      JMP OCMD3 
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    YES-REPORT ERROR
      DEF E027
      JMP OCMMD,I   EXIT
E027  EQU * 
      ASC 10,E027 COMMAND REJECT/ 
* 
OCMD3 EQU * 
      JSB DCODE,I    GO UPDATE RECORD COUNT 
OCMD2 STC CMMD,C
      JMP OCMMD,I 
* 
* 
* 
CLEAR NOP           CLEAR THE CONTROLLER
      LDA FGINT     LOAD INTERRUPT FLAG 
      SZA,RSS       IS IT SET?
      JMP CLEA3     NO-SKIP OVER INTERRUPT SETUP
      JSB LDINT,I   LOAD TRAP CELLS WITH ER MSG 
      LDA CMD 
      JSB INTJP,I   LOAD COMMAND CH TRAP CELL 
      DEF TCCMD     INTERRUPT LINK TO BASE PAGE 
      DEF CLEA2     DESTINATION OF INTERRUPT JUMP 
CLEA3 EQU * 
      LDB CLR       LOAD A CLEAR INSTRUCTION
      JSB OCMMD     OUTPUT COMMAND
      LDA CLTIM     GET MAX CLEAR TIME
      JSB TMRR,I    GO WAIT 
CLEA1 EQU * 
      SFC CMMD      IS CLEAR COMMAND FINISHED?
      JMP CLEA2     YES-CONTINUE
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    NO-REPORT ERROR 
      DEF E030
      JMP CLEA2 
E030  EQU * 
      ASC 9,E030 CLR TIME OUT/
CLEA2 EQU * 
      JSB LDINT,I   LOAD TRAP CELLS WITH ER MSG 
      JSB STATS     GET STATUS
      AND MSKCL     ARE PROPER STATUS BITS CLEAR? 
      SZA,RSS 
      JMP CLEA5     YES-OK TO EXIT
      LDA MSKRT      CHECK RW BITS
      JSB BITCK     ARE THEY SET? 
      JMP CLEA5     YES-EXIT
      JMP CLEA4     NO-REPORT ERROR 
CLEA5 EQU * 
      CLB           CLEAR B REGISTER FOR RETURN 
      JMP CLEAR,I   NO-EXIT 
CLEA4 EQU * 
      JSB STATS     GET STATUS
      AND MSKLP     ISOLATE LOAD PT BIT 
      LDB A         SETUP EXPECTED STATUS 
      JSB ERMS,I   EPORT ERROR
      DEF E043
      JMP CLEAR,I   EXIT
E043  EQU * 
      ASC 8,E043 CLR ERROR/ 
* 
* 
* 
FLGWT NOP           THIS ROUTINE WILL WAIT APPROX.
      STA AREG      -SECOND FOR THE COMMAND CHANNEL 
      STB BREG
      LDB .ME3      SET COUNTER FOR 1 SEC. TIME OUT 
      STB FLGW2     SETUP TIME OUT COUNTER
      LDA FGINT     LOAD INTERRUPT FLAG 
      SZA,RSS       IS IT SET?
      JMP FLGW3     NO-CONTINUE IN NON-INTERRUPT
      JSB LDINT,I   YES-LOAD TRAP CELLS WITH ERROR MSG
      LDA CMD 
      JSB INTJP,I   LOAD COMMAND CH TRAP CELL 
      DEF TCCMD     INTERRUPT LINK TO BASE PAGE 
      DEF EPT01     DESTINATION OF INTERRUPT JUMP 
      JMP FLGW4     GO WAIT FOR INTERRUPT 
FLGW3 EQU * 
      JSB IBTB      GO CHECK BUSY BITS
FLGW1 SFC CMMD      IS COMMAND FLAG SET?
      JMP EPT01     YES-EXIT ROUTINE
      LDA .1        NO- 
      JSB TMRR,I    GO WAIT 1 MILLI-SECOND
      ISZ FLGW2     IS TIME OUT COUNTER ZERO? 
      JMP FLGW1     NO-LOOP 
FLGW5 EQU * 
      JSB CLEAR     CLEAR CONTROLLER
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    REPORT LOST COMND FLAG
      DEF E145      POINTER TO MESSAGE
      JMP EPT01     ERROR-EXIT
E145  EQU * 
      ASC 10,E145 LOST CMND FLAG/ 
EPT01 EQU * 
      JSB LDINT,I   LOAD TRAP CELLS WITH ER MSG 
      LDA AREG      RESTORE THE "A" REGISTER
      LDB BREG      RESTORE THE "B" REG 
      JMP FLGWT,I 
* 
FLGW2 NOP           TIME OUT COUNTER
* 
FLGW4 EQU *         WAIT FOR INTERRUPT ROUTINE
      LDA .1        GO WAIT FOR 1 MILL-SEC
      JSB TMRR,I
      ISZ FLGW2     INCREMENT TIME OUT COUNTER
      JMP FLGW4     NOT FINISHED-LOOP 
      JMP FLGW5     TIME OUT-GO REPORT ERROR
* 
* 
BSRWF NOP           BACKSPACE RECORD WITH FLAG LOOP 
      LDB BSR       BACKSPACE RECORD
      JSB OCMMD     OUTPUT COMMAND
      JSB FLGWT     WAIT
      JMP BSRWF,I   EXIT
* 
BSRWO NOP           BACKSPACE RECORD W/O FLAG LOOP
      LDB BSR       BACKSPACE RECORD
      JSB OCMMD     OUTPUT COMMAND
      JMP BSRWO,I   EXIT
* 
*         FORWARD SPACE RECORD ROUTINE
* 
FSRWF NOP           FORWARD SPACE RECORD WITH FLAG
      LDB FSR       LOAD FORWARD SPACE RECORD 
      JSB OCMMD     OUTPUT COMMAND
      JSB FLGWT     WAIT FOR FLAG 
      JSB LPCK      CHECK FOR LP CLEAR
      JMP FSRWF,I   RETURN TO USER
*         REWIND SUBROUTINES
* 
* 
* 
*         REWIND UNIT ROUTINE 
* 
REWND NOP 
      LDB REW       LOAD REWIND 
      JSB OCMMD     OUTPUT REWIND COMMAND 
      JSB FLGWT     WAIT FOR COMMAND FLAG 
REW4  EQU * 
      LDA MSKOL     LOAD OFF-LINE BIT 
      JSB BITCK     IS THE BIT SET? 
      JMP REW1      YES-REPORT ERROR
      LDA MSKRT      IS TAPE BUSY AND REWINDING?
      JSB BITCK 
      JMP REW4      YES-BITS SET
      LDA MSKLP     LOAD LP BIT 
      JSB BITCK     IS IT SET?
      JMP REW3      YES-GO CHECK FOR LP EXIT
      JMP REW1      GO REPORT ERROR 
REW3  EQU * 
      JSB STATS     GET TAPE STATUS 
      LDB MSKET     LOAD EOT,TAPE BUSY, RW BITS 
      ADB MSKRT 
      AND B         ISOLATE BITS IN STATUS
      SZA,RSS       ARE ANY BITS SET? 
      JMP REW2      NO-EXIT 
REW1  EQU * 
      LDB MSKLP     YES-REPORT ERROR
      JSB ERMS,I    REPORT REWIND FAILURE 
      DEF E035
      JMP REW5      EXIT
E035  EQU * 
      ASC 09,E035 REWIND ERROR/ 
REW2  EQU * 
      STA RECNO     CLEAR RECORD COUNT
REW5  EQU * 
      JMP REWND,I   EXIT
* 
*     STATUS ROUTINE
*     A REG.=STATUS 
* 
STATS NOP 
STA1  LIA CMMD
      STA STATU     HOLD THE STATUS TEMPORARILY 
      JMP STATS,I 
* 
* 
* 
*     LPREW - ROUTINE REWINDS TAPE TO LP IF UNIT IS 
*             NOT ALREADY AT LP 
* 
*     CALL: 
*     JSB LPREW 
*         <NORMAL>  NORMAL RETURN (P+1) 
* 
LPREW NOP 
      JSB CLEAR     CLEAR CONTROLLER
      LDA MSKLP 
      JSB BITCK     IS LP BIT SET?
      JMP LPR01     YES-SKIP REWIND 
      JSB REWND     NO-REWIND UNIT
LPR01 EQU * 
      JMP LPREW,I   RETURN TO USER
* 
WTGAP NOP 
      JSB FPCK      CHECK FOR NO WRITE RING 
      LDB GAP       LOAD GAP COMMAND
      JSB OCMMD     OUTPUT COMMAND
      JSB FLGWT     WAIT FOR OPERATION TO FINISH
      LDA MSKLP     CHECK FOR LOAD POINT
      JSB BITCK     IS IT SET?
                