      LDA CHNUM     GET CHANNEL # 
      ADA .4        ADD 4 TO IT 
      STA CHNUM     SAVE NEW #
      LDA DMP01     LOAD DMA COMMAND
      JSB SETCH     ADD NEW CHANNEL # 
      STA DMP01     REPLACE DMA COMMAND 
      LDA DMP10     LOAD DMA COMMAND
      JSB SETCH     ADD NEW CHANNEL # 
      STA DMP10     REPLACE DMA COMMAND 
      LDA DMP11     LOAD DMA COMMAND
      JSB SETCH     ADD NEW CHANNEL # 
      STA DMP11     REPLACE DMA COMMAND 
      LDA WTDM2     LOAD DMA COMMAND
      JSB SETCH     ADD NEW CHANNEL # 
      STA WTDM2     REPLACE DMA COMMAND 
*                   END OF DMA INITALIZATION
* 
      ISZ DMAUP     ADJUST TO START ADDRESS 
      LDA DMAUP,I   GET STARTING ADDRESS
      STA DMUP1     SAVE IT 
      ISZ DMAUP 
      LDA DMAUP,I   GET WORD COUNT
      SZA,RSS       IS IT ZERO? 
      LDA BFMAX     YES-LOAD MAXIMUM BUFFER SIZE
      STA DMPW      SAVE WORD COUNT 
      CMA,INA       MAKE IT NEGATIVE
      STA DMPCT     SAVE IT 
      ISZ DMAUP     ADJUST RETURN FOR POSSIBLE ERROR
      LDA CWDMA     GET DMA CONTROL WORD
DMP01 OTA CHAN+4    OUTPUT CONTROL WORD 
DMP02 CLC CHAN      SETUP THE DMA BUFFER ADDRESS
      LDA DMUP1     GET BUFFER ADDRESS
DMP03 OTA CHAN      OUTPUT THE ADDRESS TO DMA 
DMP04 STC CHAN      SETUP THE DMA WORD COUNT
*                   CHECK FOR DMA 
* 
      CCA           CHECK FOR DMA 
DMP12 OTA CHAN      OUTPUT MASK 
DMP13 LIB CHAN      LOAD MASK COMPLEMENT
      SZB           NO DMA IF B=0 
      JMP DMP17     YES-CONTINUE
      JSB CLEAR     CLEAR CONTROLLER
      JSB ERMS,I    REPORT NO DMA 
      DEF E157      POINTER TO MESSAGE
      JMP DMAUP,I   ABORT-ERROR EXIT
E157  EQU * 
      ASC 06,E157 NO DMA/ 
DMP17 EQU * 
      CMB           PATCH FOR 2114/15/16 DMA
      STB DMASK     SAVE IT 
*                   END OF DMA CHECK
      LDA DMPCT     GET BUFFER LENGTH 
DMP05 OTA CHAN      OUTPUT NEG WORD COUNT TO DMA
* 
*     DMA SETUP COMPLETE
*                   SETUP FOR A READ OR WRITE 
      LDA ..1MG     LOAD BIT 15 MASK
      LDB DMUP1     GET BUFFER STARTING ADDRESS 
      AND B         IS BIT 15 SET?
      SZA,RSS 
      JMP DMP06     NO-SETUP WRITE
      LDA .RRF      YES-SETUP READ
      JMP DMP07     GOTO READ ROUTINE 
DMP06 EQU * 
      LDA .WCC      SETUP WRITE INSTRUCTION 
DMP07 EQU * 
      ADA .LDB
      STA DMP08     STORE IT
DMP08 LDB RRF       LOAD READ/OR WRITE COMMAND
      JSB OCMMD     OUTPUT READ COMMAND 
DMP09 STC DATA,C    SET THE DATA TRANSFER 
DMP10 STC CHAN+4,C  START DMA 
      LDA DTA       GET SELECT CODE OF TRAP CELL
      JSB INTJB,I   LOAD TRAP CELL WITH JSB 
      DEF TCDAT     BASE PAGE LINK
      DEF .DATI     DESTINATION OF JSB
      JSB WTDMA     WAIT FOR DMA TRANSFER 
DMP11 CLC CHAN+4,C  TURN OFF DMA
      JSB FLGWT     WAIT FOR COMMAND FLAG 
DMP20 EQU * 
      JSB CLRCH     CLEAR ALL FLAGS 
      JSB LDINT,I   FILL TRAP CELL WITH ERROR MSG 
DMP14 LIB CHAN      LOAD DMA WORD COUNT 
      SZB,RSS       IS IT ZERO? 
      JMP DMP15     YES-DMA COMPLETE
      ADB DMASK 
      ADB DMPW      NO-COMPUTE WORD COUNT 
      STB DMPW      SAVE WORD COUNT 
DMP15 EQU * 
      LDA DMPW
      STA INBFL     SAVE INPUT BUFFER LENGTH
      LDA MSKEF 
      JSB BITCK     IS EOF BIT SET? 
      JMP DMP19     YES-EXIT
      JSB STATS     GET STATUS
      AND MSKIO     ISOLATE I/O ERROR BITS
      SZA           ANY I/O ERRORS? 
      JMP DMAUP,I   YES-ERROR RETURN
DMP19 EQU * 
      ISZ DMAUP     OK-GO TO NORMAL RETURN
      JMP DMAUP,I   EXIT
* 
DMP24 EQU * 
      JSB CLEAR     CLEAR CONTROLLER
      JSB DATFG     REPORT NO DATA FLAG 
      JMP DMAUP,I   ERROR EXIT
* 
..1MG EQU MSKDN 
CHAN  EQU 2         DMA CHANNEL SET TO DMA CHANNEL 1
CWDMA EQU SW13
CHNUM NOP           1 OR 2 CHANNEL
DMUP1 NOP           BUFFER STARTING ADDRESS 
DMPCT NOP           DMA WORD COUNT
DMPW  NOP           DMA WORD COUNT (POSITIVE) 
MSKLS OCT 177770    MASK OFF LSD
* 
*                   WTDMA_WAITS FOR DMA FLAG AND
*                   STORES THE TRANSFER TIME IN DTIME 
*CALL:
*     JSB WTDMA 
*         <TRANSFER TIME =DTIME>
* 
WTDMA NOP 
      CLA           SET UP MILLI-SEC COUNTER
      STA DTIME     CLEAR TRANSFER TIME COUNTER 
      LDB .ME3      SETUP TIME OUT COUNTER FOR 1 SEC. 
      STB WTDM1 
WTDM2 EQU * 
      SFC CHAN+4    IS DMA FLAG SET?
      JMP WTDM3     YES-EXIT
WTDM4 EQU * 
      SFC CMMD      IS THE COMMAND FLAG SET?
      JMP DMP20     YES-EXIT
      LDA .1        NO-CHECK FOR TIME OUT 
      JSB TMRR,I    GO WAIT FOR 1 MILLI-SEC 
      ISZ DTIME     INCREMENT TIME TRANSFER COUNT 
      ISZ WTDM1     INCREMENT TIME OUT COUNTER
      JMP WTDM2     NO TIME OUT-GO CHECK FLAG 
      JSB CLEAR     TIME OUT-CLEAR CONTROLLER 
      JSB ERMS,I    REPORT DMA FLAG LOST
      DEF E163      POINTER TO MESSAGE
      JMP WTDM3     JUMP OVER MESSAGE 
* 
E163  EQU * 
      ASC 10,E163 LOST DMA FLAG/
WTDM3 EQU * 
      JMP WTDMA,I   EXIT
* 
WTDM1 NOP           TIME OUT COUNTER
*         SETCH - SETUP CHANNEL NUMBER IN DMA CMDS. 
*CALL:
*     JSB SETCH 
*         <NORMAL RETURN> 
* 
SETCH NOP 
      AND MSKLS     MASK OFF CHANNEL #
      ADA CHNUM     ADD NEW CHANNEL # 
      JMP SETCH,I   RETURN
* 
* 
* 
* 
* 
*     RWSLO - REWINDS TAPE UNIT TO LP AND CHECKS FOR
*             LP ONLY STATUS
*             NOTE: SLOW REWIND USING BSR COMMAND 
*CALL:
*     JSB RWSLO                  (P  )
*     JMP <ERROR>   ERROR RETURN (P+1)
*         <NORMAL>  NORMAL RETURN(P+2)
* 
RWSLO NOP 
      JSB BSRWO     BSR TO REACH LP 
RWSL1 SFC CMMD      IS IT FINISHED? 
      JMP RWSL2     YES-GO CHECK LP 
      LDA MSKOL     NO- CHECK FOR OFF-LINE
      JSB BITCK     IS UNIT OFF-LINE? 
      JMP RWSL3     YES-GO REPORT ERROR 
      JMP RWSL1     NO- GO CHECK COMMAND FLAG 
RWSL2 EQU * 
      JSB BSRWF     BACK SPACE TO LP
      LDA MSKLP     IS UNIT AT LP?
      JSB BITCK 
      JMP RWSL4     YES-OK TO EXIT
      JMP RWSL1     NO-GO BSR AGAIN 
RWSL3 EQU * 
      LDB MSKLP     SETUP EXPECTED STATUS 
      JSB ERMS,I    REPORT UNIT OFF-LINE
      DEF E140
* 
      JMP RWSLO,I   GO TO ERROR RETURN
RWSL4 EQU * 
      ISZ RWSLO     ADJUST RETURN FOR NORMAL EXIT 
      JMP RWSLO,I   EXIT
* 
* 
* 
*     SUBROUTINE ALLCP- COMPARES EACH ON-LINE UNIT
*                     - TO CONTENTS OF INPUT BUFFER 
*CALL:                - (CLEARS INPUT BUFFER AND READS A RECORD)
*     JSB ALLCP 
*         <NORMAL RETURN> 
* 
ALLCP NOP 
      CLA 
      STA UNITX     TEMPORARY UNIT NUMBER 
ALCP1 EQU * 
      JSB UNISL     GOTO SELECT UNIT ROUTINE
      JMP ALCP2     OFF-LINE RETURN 
      JSB .CLBF,I   CLEAR INPUT BUFFER
      JSB SIOR,I    READ A RECORD 
      JSB COMPR     COMPARE INPUT AND OUTPUT BUFFERS
ALCP2 EQU * 
      LDA UNITX     GET CURRENT UNIT #
      INA           INCREMENT UNIT #
      STA UNITX     SAVE IT 
      CPA .4        IS IT LAST UNIT?
      JMP ALCP3     YES-EXIT ROUTINE
      JMP ALCP1     NO-GO TRY NEXT UNIT 
ALCP3 EQU * 
      JMP ALLCP,I   EXIT
* 
* 
*     SUBROUTINE ALLRW- REWINDS ALL UNITS 
* 
*CALL:
*     JSB ALLRW 
* 
ALLRW NOP 
      CLA 
      STA ARW01     CURRENT UNIT NUMBER 
ARW02 EQU * 
      JSB UNISL     GOTO SELECT UNIT SUBROUTINE 
      JMP ARW03     OFF-LINE RETURN 
      JSB LPREW     REWIND TO LOAD POINT
ARW03 EQU * 
      LDA ARW01     GET CURRENT UNIT #
      INA           INCREMENT UNIT #
      STA ARW01     SAVE IT 
      CPA .4        IS IT THE LAST UNIT?
      JMP ALLRW,I   YES-EXIT
      JMP ARW02     NO-GOTO NEXT UNIT 
* 
ARW01 NOP           UNIT NUMBER 
* 
* 
*     SUBROUTINE ALLWR- WRITES OUTPUT BUFFER ON ALL UNITS 
* 
*CALL:
*     JSB ALLWR 
*         <NORMAL RETURN> 
ALLWR NOP 
      CLA 
      STA AWR01     CURRENT UNIT NUMBER 
AWR02 EQU * 
      JSB UNISL     GOTO SELECT UNIT SUBROUTINE 
      JMP AWR03     OFF-LINE RETURN 
      JSB SIOW,I    WRITE A RECORD
AWR03 EQU * 
      LDA AWR01     GET CURRENT UNIT #
      INA           INCREMENT UNIT #
      STA AWR01     SAVE IT 
      CPA .4        IS IT THE LAST UNIT?
      JMP ALLWR,I   YES-EXIT
      JMP AWR02     NO-GOTO NEXT UNIT 
AWR01 NOP 
* 
* 
* 
* 
* 
* 
*     SUBROUTINE CLRBF - ROUTINE CLEARS INPUT BUFFER
*CALL:
*     JSB CLRBF 
*         <NORMAL RETURN> 
* 
CLRBF NOP 
      LDA FWAM      GET FIRST WORD OF AVAILABLE MEMORY
      ADA BUFLG     COMPUTE FW OF INPUT BUFFER
      STA TMP1       STORE INPUT BUFFER ADDRESS 
      LDA LWAM      GET LAST WORD AVAILABLE 
      LDB .M1 
      ADA B         GET LAST WORD - 1 
      STA TMP2
CBF01 EQU * 
      CLA 
      STA TMP1,I     PUT ZERO IN LOCATION 
      ISZ TMP1       INCREMENT POINTER
      LDA TMP2      LOAD LAST WORD AVAILABLE
      CPA TMP1       IS POINTER=LWA 
      JMP CLRBF,I   YES-EXIT
      JMP CBF01     NO-LOOP 
* 
* 
* 
* 
*                   INTERRUPT ROUTINES
* 
*                   TCJMP- PUT JMP INSTRUCTION IN TRAP CELL 
*CALL:
*     LDA <SELECT CODE OF TRAP CELL>
*     JSB TCJMP 
*     DEF <ADDRESS OF BASE PAGE LINK> 
*     DEF <DESTINATION OF JMP-ADDRESS>
*         <NORMAL RETURN> 
* 
*INDIRECT CALL USE: 
*     JSB INTJP,I 
* 
TCJMP NOP 
      STA TCJM1     SAVE TRAP CELL SELECT CODE
      LDA JMPI      GET JUMP INSTRUCTION
      AND MKADD     MASK OFF ADDRESS
      ADA TCJMP,I   ADD ON NEW ADDRESS
      STA TCJM1,I   PUT IT IN TRAP CELL 
      LDB TCJMP,I   GET BASE PAGE LINK ADDRESS
      ISZ TCJMP     ADJUST RETURN TO NEXT PARAMETER 
      LDA TCJMP,I   GET DESTINATION OF JUMP 
      STA B,I       SETUP BASE PAGE LINK
      ISZ TCJMP     ADJUST RETURN 
      JMP TCJMP,I   RETURN TO CALLER
* 
TCJM1 NOP           SELECT CODE OF TRAP CELL
MKADD OCT 174000    MASK FOR NO ADDRESS 
* 
*                   TCJSB- PUT JSB INSTRUCTION IN TRAP CELL 
*CALL:
*     LDA <SELECT CODE OF TRAP CELL>
*     JSB TCJSB 
*     DEF <ADDRESS OF BASE PAGE LINK> 
*     DEF <DESTINATION OF JSB-ADDRESS>
*         <NORMAL RETURN> 
* 
*INDIRECT CALL USE: 
*     JSB INTJB,I 
* 
TCJSB NOP 
      STA TCJS1     SAVE TRAP CELL SELECT CODE
      LDA JSBI      GET JSB INSTRUCTION 
      AND MKADD     MASK OFF ADDRESS
      ADA TCJSB,I   ADD ON NEW ADDRESS
      STA TCJS1,I   PUT IT IN TRAP CELL 
      LDB TCJSB,I   GET ADDRESS OF BASE PAGE LINK 
      ISZ TCJSB     ADJUST POINTER TO NEXT PARAMETER
      LDA TCJSB,I   GET DESTINATION OF JSB
      STA B,I       PUT IT IN BASE PAGE LINK
      ISZ TCJSB     SKIP OVER ADDRESS-ADJUST RETURN 
      JMP TCJSB,I   RETURN TO CALLER
* 
TCJS1 NOP            TRAP CELL SELECT CODE
* 
* 
* 
*                   INTON- TURN ON INTERRUPTS 
*CALL:
*     JSB INTON,I 
*         <NORMAL RETURN> 
* 
.INTN NOP 
      CCA           SET INTERRUPT FLAG
      STA FGINT 
      JSB CLRCH     CLEAR DMA,COMMAND, AND DATA CHANNELS
      STF INTP      TURN ON INTERRUPT SYSTEM
      JMP .INTN,I   RETURN TO CALLER
* 
* 
*                   INTOF- TURN OFF INTERRUPTS
*CALL:
*     JSB INTOF,I 
*         <NORMAL RETURN> 
* 
.INTF NOP 
      CLA           CLEAR INTERRUPT FLAG
      STA FGINT 
      CLF INTP      TURN OFF INTERRUPTS 
      JMP .INTF,I   RETURN TO USER
* 
* 
* 
* 
*                   CMMDI- REPORT INTERRUPT ERROR ON
*                          COMMAND CHANNEL
*CALL:
*     JSB CMMDI,I 
*         <NORMAL RETURN> 
.CMDI NOP 
      JSB CMDSV     SAVE THE A AND B REG
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    REPORT COMMAND INTERRUPT ERROR
      DEF E160
      JSB CMDRS     RESTORE A AND B REG 
      JMP .CMDI,I   RETURN TO CALLER
* 
* 
CMDSV NOP 
      STA CDSV1     SAVE THE A REG
      STB CDSV2     SAVE THE B REG
      JMP CMDSV,I   EXIT ROUTINE
* 
CMDRS NOP 
      LDA TSTN      GET CURRENT TEST #
      CPA .37       IS IT OP DESIGN?
      JMP .IRQ,I    YES-EXIT
      LDA CDSV1 
      LDB CDSV2     RESTORE A AND B REG 
      JMP CMDRS,I   EXIT ROUTINE
* 
* 
CDSV1 NOP 
CDSV2 NOP 
* 
*                   DATAI-REPORT INTERRUPT ERROR ON 
*                         DATA CHANNEL
* 
*CALL:
*     JSB DATAI,I 
*         <NORMAL RETURN> 
.DATI NOP 
      JSB CMDSV     SAVE THE A AND B REG
      CLB           SETUP EXPECTED STATUS 
      JSB ERMS,I    REPORT DATA INTERRUPT ERROR 
      DEF E161
      JSB CMDRS     RESTORE A AND B REG 
      JMP .DATI,I   RETURN TO CALLER
* 
* 
*                   DMAI- REPORT INTERRUPT ERROR ON 
*                          DMA CHANNEL
*CALL:
*     JSB DMAI,I
*         <NORMAL RETURN> 
.DMAI NOP 
      CLB           SETUP EXPECTED STATUS 
      JSB CMDSV     SAVE THE A AND B REG
      JSB ERMS,I    REPORT DMA INTERRUPT ERROR
      DEF E162
      JSB CMDRS     RESTORE A AND B REG 
      JMP .DMAI,I   RETURN TO CALLER
* 
E160  EQU * 
      ASC 09,E160 COMMAND INT/
E161  EQU * 
      ASC 07,E161 DATA INT/ 
* 
      SKP 
      ORG PAG14 
      LST 
*         SKIP TO NEXT PAGE OF MEMORY   ********************************
E162  EQU * 
      ASC 07,E162 DMA INT/
* 
* 
*                   LDINT-LOADS ALL INTERRUPT CHANNELS
*                         (COMMAND,DATA,AND DMA) WITH 
*                         ERROR MESSAGES
*CALL:
*     JSB LDINT,I 
*         <NORMAL RETURN> 
* 
.LDIT NOP 
      LDA CMD       GET SELECT CODE OF COMMAND CH 
      JSB INTJB,I   GO INSERT JSB IN TRAP CELL
      DEF TCCMD     BASE PAGE LINK
      DEF .CMDI     ADDRESS OF SUBROUTINE 
      LDA DTA       GET SELECT CODE OF DATA CH
      JSB INTJB,I   GO INSERT JSB IN TRAP CELL
      DEF TCDAT     BASE PAGE LINK
      DEF .DATI     ADDRESS OF SUBROUTINE 
      LDA .LDI1     GET ADDRESS OF DMA CHANNEL
      JSB INTJB,I   GO INSERT JSB IN TRAP CELL
      DEF TCDA1     BASE PAGE LINK
      DEF .DMAI     ADDRESS OF SUBROUTINE 
      LDA .LDI1 
      INA           GET ADDRESS OF DMA CHANNEL
      JSB INTJB,I   GO INSERT JSB IN TRAP CELL
      DEF TCDA2     BASE PAGE LINK
      DEF .DMAI     ADDRESS OF SUBROUTINE 
      JMP .LDIT,I   EXIT
* 
.LDI1 DEF CHAN+4
* 
* 
* 
*         RDGAP-ISSUES A RFF COMMAND AND WAITS FOR FIRST
*                DATA FLAG THEN CLEARS IT.
* CALL: 
*     JSB RDGAP 
*         <ERROR RETURN>      P+1 
*         <NORMAL RETURN>     P+2 
* 
RDGAP NOP 
      LDB RFF       GET RFF COMMAND 
      JSB OCMMD     OUTPUT THE COMMAND
RGP01 STC DATA,C    SETUP DATA TRANSFER 
      CLB           SETUP TIME OUT COUNTER
RGP02 SFC DATA      IS DATA FLAG SET? 
      JMP RGP03     YES-EXIT ROUTINE
      INB,SZB       NO-HAS COUNTER TIMED OUT
      JMP RGP02     NO-GO CHECK FLAG AGAIN
      JSB CLEAR     YES-CLEAR CONTROLLER
      JSB DATFG     REPORT NO DATA FLAG 
      JMP RDGAP,I   ERROR EXIT
RGP03 CLF DATA      CLEAR DATA FLAG 
      ISZ RDGAP     SETUP FOR NORMAL RETURN 
      JMP RDGAP,I    EXIT 
* 
*                   DCODE-UPDATES RECORD COUNT
*                   RECNO IS SET TO ZERO WHENEVER BOT OCCURS
* 
*CALL:
*     JSB DCODE,I 
*         <NORMAL RETURN> 
* 
.DCOD NOP 
      LDA MSKLP 
      JSB BITCK     IS IT AT BOT? 
      JMP DCOD1     YES-CLEAR RECORD COUNT
      JMP DCOD2     NO-GO DECODE THE COMMAND
DCOD1 EQU * 
      CLA 
      STA RECNO     CLEAR RECORD COUNTER
DCOD2 EQU * 
      LDA OCMD4     GET THE LAST COMMAND
      AND BSR       CHECK FOR 41 CODE 
      CPA BSR       IS IT A REVERSE COMMAND?
      JMP DCOD3     YES-GO DECREMENT REC NO.
      JMP DCOD4     NO-GO CHECK FORWARD MOTION
* 
DCOD3 EQU * 
      LDA RECNO     GET RECORD NUMBER 
      SZA           SKIP IF RECORD COUNT =0 
      ADA .M1       SUBTRACT A RECORD 
      STA RECNO     UPDATE RECORD COUNTER 
      JMP DCOD9     EXIT
DCOD4 EQU * 
      LDA OCMD4     GET LAST COMMAND
      AND .3        ISOLATE FORWARD MOTION BITS 
      CPA .3        IS IT FORWARD MOTION? 
      JMP DCOD8     YES-INCREMENT COUNTER 
      LDA OCMD4     NO-GET LAST COMMAND 
      AND .09D      ISOLATE WRITE COMMAND BITS
      CPA .09D      IS IT A WRITE COMMAND?
DCOD8 EQU * 
      ISZ RECNO     YES-INCREMENT RECORD COUNTER
      NOP 
DCOD9 EQU * 
      JMP .DCOD,I   EXIT ROUTINE
* 
* 
* 
*                   EXTENDED ERROR MESSAGE ROUTINE
* 
.ERMS NOP 
      STA .ER17     SAVE REGISTERS-STATUS 
      STB .ER18              -EXPECTED STATUS 
      LDA FGINT     LOAD INTERRUPT SYS ON FLAG
      STA INTFG     SAVE INTERRUPT FLAG 
      LDA .ERMS,I   GET POINTER TO ERROR MSG
      STA .ER01     SAVE IT FOR ERROR MESSAGE 
      ISZ .ERMS     ADJUST RETURN 
      LDA ERSKP     LOAD ERROR MSG SKIP FLAG
      SZA           IS IT SET?
      JMP .ERMS,I   YES-EXIT SUBROUTINE 
* 
      LDB SW11      GO CHECK SWITCH 11
      JSB SWRC,I    IS IT SET?
      JMP .ER15     YES-DO NOT OUTPUT MESSAGE 
      LDA TST0F     GET TEST 0 FLAG 
      SZA           IS IT TEST 0? 
      JMP .ER15     YES-DELETE MESSAGES 
      JSB STATS     GET STATUS
      STA .ER14     SAVE STATUS 
      LDA FG183     LOAD 13183 FLAG 
      SZA,RSS       IS IT A 13183?
      JMP .ER05      NO-SKIP OVER UNIT ID SETUP 
      LDA .ER18     LOAD A WITH EXPECTED STATUS 
      LDB UNIT      GET THE UNIT NUMBER 
      BLF,BLF       MOVE UNIT # TO BITS 13-14 
      RBL,BLF 
      ADB MSKDN     ADD DENSITY BIT 
      IOR B         ADD ID TO EXPECTED STATUS 
      STA .ER18     RESTORE EXPECTED STATUS 
.ER05 EQU * 
*                   BEGIN SETUP FOR NON ERROR MESSAGES
      LDA UNIT      LOAD CURRENT UNIT # 
      STA .ER02     SAVE IT 
      LDA RECNO     LOAD CURRENT RECORD # 
      STA .ER03     SAVE IT 
      LDA OCMD4     GET THE LAST COMMAND EXECUTED 
      STA .ER04     SAVE IT 
      LDA .ER18     GET EXPECTED STATUS 
      STA EXPST     SAVE IT ON BASE PAGE
      JSB INTOF,I   TURN OFF THE INTERRUPT ROUTINE
*                   BEGIN MESSAGE OUTPUT ROUTINE
      JSB MS,I      OUTPUT MESSAGE-CURRENT UNIT 
      DEF .ER07     RETURN
      DEF .ER08     POINTER TO MESSAGE
.ER02 NOP           CURRENT UNIT
H154  EQU * 
.ER08 EQU * 
      ASC 06,H154 UNIT #/ 
.ER07 EQU * 
      JSB MS,I      OUTPUT MESSAGE-RECORD NUMBER
      DEF .ER09     RETURN
      DEF H102      POINTER TO MESSAGE
.ER03 NOP           CURRENT RECORD NUMBER 
H102  EQU * 
      ASC 07,H102 RECORD #/ 
.ER09 EQU * 
      JSB MS,I      OUTPUT MESSAGE-COMMAND
      DEF .ER11     RETURN
      DEF .ER12     POINTER TO MESSAGE
.ER04 NOP           LAST EXECUTED COMMAND 
H054  EQU * 
.ER12 EQU * 
      ASC 08,H054 COMMAND #/
.ER11 EQU * 
      LDA .ER14     GET STATUS IN A REGISTER
      JSB FMT03     GO OUTPUT MESSAGE 
      DEF H155      POINTER TO MESSAGE
      JMP .ER13     JUMP OVER MESSAGE 
H155  EQU * 
      ASC 11,H155 STATUS IS      _
.ER13 EQU * 
      LDA .ER18     LOAD A WITH EXPECTED STATUS 
      JSB FMT03     OUTPUT THE MESSAGE
      DEF H1551     POINTER TO MESSAGE
      JMP .ER15     JUMP OVER MESSAGE 
H1551 EQU * 
      ASC 11,H155 AND SHOULD BE  _
.ER15 EQU * 
*                   ERROR MESSAGE 
      LDA SUBTS     GET CURRENT SUBTEST # 
      ALF,ALF       MOVE TO UPPER BYTE
      ADA TSTN      LOAD CURRENT TEST # IN LOWER BYTE 
      LDB .ER14     LOAD CURRENT STATUS 
      JSB .ZERM,I   REPORT ERROR
.ER01 NOP 
      LDA INTFG     LOAD THE INTERRUPT FLAG 
      SZA           IS IT SET?
      JSB INTON,I   YES-TURN IT BACK ON 
      LDB SW09      CHECK SWITCH REG.  BIT 9
      JSB SWRC,I    IS IT SET?
      JMP .ER16     YES-GO CHECK RETURN 
      LDA .ER17     RESTORE A AND B REGISTER
      LDB .ER18 
      JMP .ERMS,I   EXIT ROUTINE
.ER16 EQU * 
      LDA TSTN      GET THE CURRENT TEST #
      CPA .37       IS IT OPDSN?
      JMP .IRQ,I    YES-EXIT TO OPDSN 
      JMP .ZUSR,I   EXIT TO HALT 75 
* 
* 
.ER17 NOP           A REG CONTENTS
.ER18 NOP           B REG CONTENTS
.ER14 NOP           CURRENT STATUS
* 
*     SUBROUTINE FMT02-SETUP FOR CALL TO FMTR 
* 
*CALL:
*     JSB .FMT2,I   INDIRECT CALL 
*     DEF <POINTER TO MESSAGE>
*         <NORMAL RETURN> 
* 
FMT02 NOP 
      LDB FMT02,I   GET MESSAGE ADDRESS 
      ISZ FMT02     ADJUST RETURN 
      CLA,CLE       SETUP FOR OUTPUT
      JSB FMTR,I    OUTPUT THE MESSAGE
      JMP FMT02,I   EXIT
* 
* 
*     SUBROUTINE FMT03-SETUP FOR CALL TO FMTR WITH A #
* 
*CALL:
*     LDA <# FOR MESSAGE> 
*     JSB .FMT3,I   INDIRECT CALL-OUTPUT THE MESSAGE
*     DEF <POINTER TO MESSAGE>
*         <NORMAL RETURN> 
* 
* 
* 
FMT03 NOP 
      STA FM01      SAVE OCTAL NUMBER OUTPUT
      LDB SW10      CHECK SWITCH 10 
      JSB SWRC,I    IS IT SET?
      JMP FM08      YES-SKIP OVER MESSAGE 
      LDA FMT03,I   GET ADDRESS OF MESSAGE
      STA FM03      SAVE IT 
      ISZ FMT03     ADJUST RETURN 
      JSB FMT02     OUTPUT THE MESSAGE
FM03  NOP           POINTER TO MESSAGE
      CLE           CLEAR THE E REGISTER
      JSB BINC      OUTPUT BIT 15 OF #
      LDA .M5       SET UP BIT COUNTER
      STA COUNT 
FM04  EQU * 
      JSB FMT02     OUTPUT A SPACE
      DEF FMTSP     POINTER TO MESSAGE
      JSB BINC      OUTPUT THE #'S BITS 
      JSB BINC      -THREE IN A ROW 
                                                                                                                                                                                                                                                        