      JSB BINC
      ISZ COUNT     FINISHED? 
      JMP FM04      NO-GO OUTPUT NEXT OCTAL # 
      JSB FMT02     OUTPUT CR-LF
      DEF FMTCR     POINTER TO MESSAGE
      JMP FMT03,I   EXIT
FM08  EQU * 
      ISZ FMT03     ADJUST RETURN 
      JMP FMT03,I   EXIT
* 
* 
* 
* 
*     SUBROUTINE BINC-DECODES OCTAL # TO BINARY OUTPUT
* 
*CALL:
*     JSB BINC
*         <NORMAL RETURN> 
* 
BINC  NOP 
      LDA FM01      GET THE NUMBER
      ELA           ROTATE # INTO E 
      STA FM01      RESTORE THE # 
      SEZ          IS THE BIT = 0?
      JMP FM06      NO-GO OUTPUT A 1
      JSB FMT02     OUTPUT A 0
      DEF FMT00     POINTER TO THE MESSAGE
      JMP FM07      GOTO EXIT 
FM06  EQU * 
      JSB FMT02     OUTPUT A 1
      DEF FMT01     POINTER TO THE MESSAGE
FM07  EQU * 
      JMP BINC,I    EXIT
* 
* 
* 
* 
FM01  NOP           NUMBER FOR OUTPUT MESSAGE 
.M5   DEC -5        -5
FMT00 ASC 01,0_     0 OUTPUT MESSAGE
FMT01 ASC 01,1_     1 OUTPUT MESSAGE
FMTSP ASC 01, _     OUTPUTS A SPACE 
FMTCR ASC 01, /     OUTPUTS A CR-LF 
* 
* 
* 
      HED           7970 OPERATOR DESIGN
* 
*         OPERATOR DESIGN EXTENTION SECTION ****************************
* 
* 
* 
* 
*                   FMTR2-
*                   POINTS TO FMTR
*CALL:
*     LDA <FAST OR SLOW DEVICE> 
*     LDB <POINTER TO STRING> 
*     JSB FMTR2,I 
* 
* ON ENTRY THE INTERRUPT SYSTEM WILL BE TURNED OFF IF "A" 
* IS POSITITVE.  ON EXIT THE INTERRUPT SYSTEM WILL BE CHECKED 
* IF THE RETURN FROM FMTR INDICATES THAT A NUMBER IS NOT
* EXPECTED TO BE PASSED BACK TO THE FMTR. 
.FMTR NOP 
      SSA           IS IT INITIAL CALL? 
      JMP .FMTX     NO - SO DO NOT LOOK AT INT SYS
      STA .FTR1     SAVE A AND B REG
      STB .FTR2 
      LDA FGINT     LOAD THE INTERRUPT FLAG 
      STA .FTR3     SAVE IT 
      JSB INTOF,I   TURN INTERRUPT SYSTEM OFF 
      LDA .FTR1     RESTORE A AND B REGISTER
      LDB .FTR2 
.FMTX JSB FMTR,I    OUTPUT THE MESSAGE
      SZA           IS A NUMBER BEING REQUESTED?
      JMP .FMTR,I   YES - BYPASS CHECK OF INT SYS 
      STA .FTR1     SAVE A AND B REG
      STB .FTR2 
      LDA .FTR3      LOAD INTERRUPT FLAG
      SZA            WAS THE INTERRUPT SYS ON?
      JSB INTON,I   YES-TURN IT BACK ON ************************
      LDA .FTR1     RESTORE A AND B REGISTER
      LDB .FTR2 
      JMP .FMTR,I    EXIT 
* 
.FTR1 NOP           CONTENTS OF A REG 
.FTR2 NOP           CONTENTS OF B REG 
.FTR3 NOP           INTERRUPT FLAG
* 
*                   SETUP FOR OPERATOR DESIGN 
* 
.OPST NOP           SETUP PRIOR TO EXECUTING OPDSN
      JSB INTOF,I   TURN OFF INTERRUPT SYSTEM 
      JSB KCORE     SETUP MAXIMUM CORE SIZE 
      JSB .ZTCH,I   LOAD ALL TRAP CELLS WITH HALTS
      JSB LDINT,I   LOAD TRAP CELLS WITH ER MSG 
      CLA 
      STA CNT01     CLEAR COUNTER 
      STA FGDMA     CLEAR DMA FLAG
      STA FGINT     CLEAR INTERRUPT FLAG
      STA SKPSW     CLEAR SKIP SW REG CK FLAG 
      JMP .OPST,I 
* 
* 
*         OPERATOR DESIGN STATEMENT DEFINITIONS 
*         AND ROUTINE POINTERS
* 
STUDD EQU * 
* 
      ASC 2,SR      STATUS REPORT 
      ASC 1,AA
      DEF SR0 
* 
      ASC 2,SC      STATUS COMPARE
      ASC 1,IK
      DEF SC0 
* 
      ASC 2,SFC     SKIP FLAG CLEAR 
      ASC 1,IA
      DEF SFC0
* 
      ASC 2,SD      STANDARD DATA PATTERN 
      ASC 1,AI
      DEF SD0 
* 
      ASC 2,RD      READS A RECORD
      ASC 1,KK
      DEF RD0 
* 
      ASC 2,WR      WRITES A RECORD 
      ASC 1,KK
      DEF WR0 
* 
* 
      ASC 2,SEL0    SELECT UNIT 0 
      ASC 1,II
      DEF SL00
* 
      ASC 2,SEL1    SELECT UNIT 1 
      ASC 1,II
      DEF SL10
* 
      ASC 2,SEL2    SELECT UNIT 2 
      ASC 1,II
      DEF SL20
* 
      ASC 2,SEL3    SELECT UNIT 3 
      ASC 1,II
      DEF SL30
* 
      ASC 2,WCC     WRITE RECORD
      ASC 1,II
      DEF WCC0
* 
      ASC 2,WFM     WRITE FILE MARK 
      ASC 1,II
      DEF WFM0
* 
      ASC 2,RRF     READ RECORD 
      ASC 1,II
      DEF RRF0
* 
      ASC 2,FSR     FORWARD SPACE RECORD
      ASC 1,II
      DEF FSR0
* 
      ASC 2,FSF     FORWARD SPACE FILE
      ASC 1,II
      DEF FSF0
* 
      ASC 2,GAP     WRITE GAP 
      ASC 1,II
      DEF GAP0
* 
      ASC 2,BSR     BACKSPACE RECORD
      ASC 1,II
      DEF BSR0
* 
      ASC 2,BSF     BACK SPACE FILE 
      ASC 1,II
      DEF BSF0
* 
      ASC 2,REW     REWIND
      ASC 1,II
      DEF REW0
* 
      ASC 2,RWO     REWIND OFF-LINE 
      ASC 1,II
      DEF RWO0
* 
      ASC 2,CLR     CLEAR 
      ASC 1,II
      DEF CLR0
* 
      ASC 2,GFM     GAP-FILE MARK 
      ASC 1,II
      DEF GFM0
* 
* 
      ASC 2,CRC     READ AND OUTPUT CRCC
      ASC 1,KI
      DEF CRC0
* 
* 
      ASC 2,DMA     READ OR WRITE UNDER DMA 
      ASC 1,II
      DEF DMA0
* 
      ASC 2,INTR    READ OR WRITE UNDER INTERRUPT 
      ASC 1,II
      DEF INTR0 
* 
* 
      ASC 2,FLAG    READ OR WRITE UNDER FLAG
      ASC 1,II
      DEF FLAG0 
* 
*                   READ AND OUTPUT DMA WORD COUNT
* 
      ASC 2,DMAW
      ASC 1,II
      DEF DMAW0 
* 
* 
      ASC 2,CRCI    COMPUTE CRCC FROM INPUT BUFFER
      ASC 1,KK
      DEF CRCI0 
* 
      ASC 2,CRCO    COMPUTE CRCC FROM OUTPUT BUFFER 
      ASC 1,KK
      DEF CRCO0 
* 
      ASC 2,COMP    COMPARE INPUT AND OUTPUT BUFFERS
      ASC 1,KK
      DEF COMP0 
* 
      ASC 2,CNT     COUNTER- USE ONLY ONE TIME
      ASC 1,II
      DEF CNT0
* 
      ASC 2,WORD    FILL OUTPUT BUFFER WITH A SPECIAL 
      ASC 1,KI       WORD 
      DEF WORD0 
* 
      ASC 2,LRCI    COMPUTE LRCC FOR INPUT BUFFER 
      ASC 1,II
      DEF LRCI0 
* 
      ASC 2,LRCO    COMPUTE LRCC FOR OUTPUT BUFFER
      ASC 1,II
      DEF LRCO0 
* 
* 
      ASC 2,TRAP    FILL INTERRUPT TRAP CELL WITH JMP 
      ASC 1,KI
      DEF TRAP0 
* 
      ASC 2,STC     SET CONTROL 
      ASC 1,KK
      DEF STC0
* 
      ASC 2,CLC     CLEAR CONTROL 
      ASC 1,KK
      DEF CLC0
* 
      ASC 2,STF     SET FLAG
      ASC 1,KK
      DEF STF0
* 
      ASC 2,CLF     CLEAR FLAG
      ASC 1,KK
      DEF CLF0
* 
* 
      DEC -1        END OF LIST 
* 
* 
* 
* 
SR0   NOP 
* 
*                   STATUS REPORT 
* 
      JSB STATS     GET STATUS
      STA AREG      SAVE STATUS 
      CLA,CLE       BEGIN OUTPUT
      LDB SR01      LOAD POINTER TO MESSAGE 
      JSB FMTR2,I   OUTPUT IT 
      CCA 
      LDB UNIT      LOAD TAPE UNIT #
      JSB FMTR2,I   OUTPUT IT 
      CCA 
      LDB AREG      LOAD STATUS 
      JSB FMTR2,I   OUTPUT IT 
      JMP SR0,I     EXIT
* 
SR01  DEF *+1 
      ASC 09,UNIT #   STATUS #/ 
* 
* 
* 
*                   STATUS COMPARE
* 
SC0   NOP 
      STA AREG      SAVE A AND B REGISTER 
      STB BREG
      SZA,RSS       IS A REG ZERO?
      JMP SC02      YES-REPORT ERROR AND EXIT 
      JSB STATS     GET STATUS
      CPA BREG      COMPARE STATUS
      JMP SC0,I     THEY ARE =, EXIT
*                   SETUP JMP TO NEXT STATEMENT ROUTINE   ********* 
      LDA AREG      GET NEW LINE NUMBER 
      ISZ SC0       ADJUST RETURN TO NEW LINE # 
      JMP SC0,I     EXIT
SC02  EQU * 
      JMP .OPLN,I   GO REPORT NO LINE # 
* 
* 
* 
*                   SKIP FLAG CLEAR 
SFC0  NOP 
      STA AREG      SAVE A AND B REGISTER 
      STB BREG
      SZA,RSS       IS A ZERO?
      JMP SFC01     GO REPORT LINE # MISSING
      CPB SFC03     IS IT "D"?
      JMP SFC04     YES- GO CHECK DATA CHANNEL
      CPB SFC05     NO-CHECK FOR "C"
      JMP SFC06     YES-GO CHECK COMMAND CHANNEL
      JMP SFC06     NO-NEITHER C OR D - GO CHECK C
SFC04 EQU * 
*                   DATA CHANNEL  CHECK 
      CLA           O-FOR DATA CHANNEL
      JSB FLGCK     IS FLAG SET?
SFC08 EQU *         YES-EXIT
      JMP SFC0,I    EXIT
SFC07 EQU * 
      LDA AREG      GET LINE #
      ISZ SFC0      ADJUST RETURN FOR LINE CHANGE 
      JMP SFC0,I    EXIT
*                   COMMAND CHANNEL CHECK 
* 
SFC06 EQU * 
      CCA           ALL 1'S FOR COMAND CHANNEL
      JSB FLGCK     IS FLAG SET?
      JMP SFC08     YES-EXIT
      JMP SFC07     NO
SFC01 EQU *         REPORT LINE # MISSING 
      JMP .OPLN,I   GO REPORT NO LINE # 
SFC03 ASC 1,D       ASCII D 
SFC05 ASC 1,C       ASCI  C 
* 
* 
*                   COMMAND OR DATA CHANNEL CHECK 
* 
*CALL:
*     CLA OR CCA    CLA=DATA CHANNEL
*                   CCA=COMMAND CHANNEL 
*     JSB FLGCK 
*     <N+1>         FLAG SET RETURN 
*     <N+2>         FLAG NOT SET RETURN 
*      :
*      .
*      .
FLGCK NOP 
      SZA,RSS       IS A REG ZERO?
      JMP FGCK0     YES-GO CHECK DATA CHANNEL 
FGCK1 SFS CMMD      NO- GO CHECK COMMAND CHANNEL
      JMP FGCK2     FLAG NOT SET
      JMP FLGCK,I   FLAG SET-EXIT 
FGCK0 EQU * 
FGCK3 EQU * 
      SFS DATA      IS DATA FLAG SET? 
      JMP FGCK2     NO
      JMP FLGCK,I   YES-EXIT
FGCK2 EQU *         FLAG NOT SET
      ISZ FLGCK     INCREMENT RETURN
      JMP FLGCK,I   EXIT
* 
* 
*                   STANDARD DATA PATTERN 
* 
*        A REG. CONTAINS THE RECORD LENGTH
*        B REG. CONTAINS SPECIAL DATA PATTERN (OPTIONAL)
* 
SD0   NOP 
      STA AREG      SAVE A AND B REGISTER 
      STB BREG
      SZB,RSS       IS THERE A BUFFER LENGTH? 
      LDB BFMAX     NO-GET MAXIMUM BUFFER LENGTH
      STB SD020     SAVE IT 
      LDA AREG      RESTORE A 
      CPA SD0RA     IS IT RANDOM DATA?
      JMP SD001     YES-DO IT 
      CPA SD0SR     IS IT ROTATING 1? 
      JMP SD002     YES-
      CPA SD0TR     IS IT TRACK SAWTOOTH? 
      JMP SD003     YES-
      CPA SD0CH     IS IT CHANNEL SAWTOOTH? 
      JMP SD004     YES 
      CPA SD012     IS IT ALL 125125? 
      JMP SD005     YES 
      CPA SD015     IS IT ALL 1'S?
      JMP SD006     YES 
      CPA SD00S     IS IT ALL 0'S?
      JMP SD007     YES-
      STA SD017     NO-ASSUME SPECIAL PATTERN 
      LDA .1
      LDB SD018     POINTER TO PATTERN
      JMP SD016 
SD018 DEF *+1 
SD017 NOP           PATTERN 
* 
      JMP SD0,I     EXIT
SD0RA ASC 1,RA
SD0SR ASC 1,SR
SD0TR ASC 1,TR
SD0CH ASC 1,CH
SD012 ASC 1,FR      125125 PATTERN
SD015 ASC 1,ON      ALL ONES PATTERN
SD00S ASC 1,ZE      ALL ZEROS PATTERN 
* 
SD001 EQU * 
      STB TMP1      SAVE THE BUFFER LENGTH
SD008 EQU * 
      SSB           IS BUFFER LENGTH POSITIVE 
      JMP SD022     NO-REPORT BUFFER LENGTH ERROR 
      LDA BFMAX     GET MAXIMUM BUFFER SIZE 
      INA           ADD ONE TO IT 
      CMA,INA       MAKE IT NEGATIVE
      ADB A         COMPUTE AVAILABLE CORE
      SSB           IS BUFFER TOO LARGE?
      JMP SD009     NO GOTO BUFFER SETUP
SD022 EQU * 
      CLB           YES-SETUP ERROR MESSAGE 
      JSB ERMS,I    REPORT ERROR
      DEF E061      POINTER TO BUFFER FULL MSG
      JMP .IRQ,I    EXIT
SD009 EQU * 
      LDB TMP1      GET BUFFER LENGTH 
      STB BUFLG     SAVE THE BUFFER LENGTH
      JSB RADBF     FILL BUFFER WITH RANDOM DATA
      JMP SD0,I     EXIT
SD002 EQU * 
      LDA .09D      NINE PATTERNS IN SEQUENCE 
      LDB TSRB      ROTATING BIT PATTERN
      JMP SD016 
SD003 EQU * 
      LDA .5        FIVE PATTERNS IN SEQUENCE 
      LDB TSAW      TRACK SAWTOOTH PATTERN
      JMP SD016 
SD004 EQU * 
      LDA .5        FIVE PATTERNS IN SEQUENCE 
      LDB CSAW      CHANNEL SAWTOOTH PATTERN
      JMP SD016 
SD005 EQU * 
      LDA .1
      LDB HLFRQ     125125 PATTERN
      JMP SD016 
SD006 EQU * 
      LDA .1
      LDB ALL1      ALL 1'S PATTERN 
      JMP SD016 
SD007 EQU * 
      LDA .1
      LDB .00       ALL O'S PATTERN 
      JMP SD016 
SD016 EQU * 
      JSB FILL,I    FILL THE OUTPUT BUFFER
      DEF SD019     RETURN
SD020 NOP           BUFFER LENGTH 
      DEF IRQ       ERROR RETURN
SD019 EQU * 
      JMP SD0,I     EXIT
* 
.00   DEF *+1 
      NOP 
* 
* 
*                   TAPE COMMAND
* 
* 
*         SELECT UNIT 0 
* 
SL00  NOP 
      CLA 
      STA UNICT     SETUP UNIT COUNTER
      JSB UNISL     SELECT TAPE UNIT
      NOP 
      JMP SL00,I    EXIT
* 
*         SELECT UNIT 1 
SL10  NOP 
      LDA .1
      STA UNICT     SETUP UNIT COUNTER
      JSB UNISL     SELECT TAPE UNIT
      NOP 
      JMP SL10,I    EXIT
* 
*         SELECT UNIT 2 
SL20  NOP 
      LDA .2
      STA UNICT     SETUP UNIT COUNTER
      JSB UNISL     SELECT TAPE UNIT
      NOP 
      JMP SL20,I    EXIT
* 
*         SELECT UNIT 3 
SL30  NOP 
      LDA .3
      STA UNICT     SETUP UNIT COUNTER
      JSB UNISL     SELECT TAPE UNIT
      NOP 
      JMP SL30,I    EXIT
* 
WCC0  NOP 
      LDB WCC 
      JSB OCMMD     OUTPUT COMMAND
      JMP WCC0,I    EXIT
* 
WFM0  NOP 
      LDB WFM 
      JSB OCMMD     OUTPUT COMMAND
      JMP WFM0,I    EXIT
* 
RRF0  NOP 
      LDB RRF 
      JSB OCMMD     OUTPUT COMMAND
      JMP RRF0,I    EXIT
* 
FSR0  NOP 
      LDB FSR 
      JSB OCMMD     OUTPUT COMMAND
      JMP FSR0,I
* 
FSF0  NOP 
      LDB FSF 
      JSB OCMMD     OUTPUT COMMAND
      JMP FSF0,I    EXIT
* 
GAP0  NOP 
      LDB GAP 
      JSB OCMMD     OUTPUT COMMAND
      JMP GAP0,I    EXIT
* 
BSR0  NOP 
      LDB BSR 
      JSB OCMMD     OUTPUT COMMAND
      JMP BSR0,I    EXIT
* 
BSF0  NOP 
      LDB BSF 
      JSB OCMMD     OUTPUT COMMAND
      JMP BSF0,I    EXIT
* 
REW0  NOP 
      LDB REW 
      JSB OCMMD     OUTPUT COMMAND
      JMP REW0,I    EXIT
* 
RWO0  NOP 
      LDB RWO 
      JSB OCMMD     OUTPUT COMMAND
      JMP RWO0,I    EXIT
* 
* 
CLR0  NOP 
      LDB CLR 
      JSB OCMMD     OUTPUT COMMAND
      JMP CLR0,I    EXIT
* 
GFM0  NOP 
      LDB GFM 
      JSB OCMMD     OUTPUT COMMAND
      JMP GFM0,I    EXIT
* 
* 
* 
*                   READ CRCC 
* 
CRC0  NOP 
CRC1  EQU * 
      LIA DATA,C    LOAD CRCC FROM LAST RECORD
      STA CRC2      SAVE IT 
      CLA,CLE 
      LDB CRC3      OUTPUT CRCC WORD MESSAGE
      JSB FMTR2,I 
      CCA 
      LDB CRC2      OUTPUT WORD 
      JSB FMTR2,I 
      JMP CRC0,I    EXIT
* 
CRC3  DEF *+1 
      ASC 07,CRCC = # TAPE/ 
CRC2  NOP           CRCC WORD 
* 
* 
*                   SET DMA FLAG
* 
DMA0  NOP 
      CPA .2        IS IT CHANNEL 2?
      JMP DMA1      YES-OK
      CPA .3        NO-IS IT CHANNEL 3? 
      JMP DMA1      YES-OK
      LDA .2        NO-DEFAULT TO CHANNEL 2 
      STA AREG      SAVE IT 
DMA1  EQU * 
      STA FGDMA     SET DMA FLAG WITH CHANNEL # 
      JMP DMA0,I
* 
*                   SET INTERRUPT FLAG
* 
INTR0 NOP 
      JSB INTON,I   TURN ON INTERRUPTS
      JMP INTR0,I 
* 
* 
*                   READ AND WRITE UNDER FLAG 
*                  (CLEAR ALL READ AND WRITE FLAGS) 
* 
* 
FLAG0 NOP 
      JSB INTOF,I   TURN OFF INTERRUPTS 
      CLA 
      STA FGDMA     CLEAR FLAGS 
      STA FGINT 
      JSB CLRCH     CLEAR CMND AND DATA CHANNELS
      JMP FLAG0,I   EXIT
* 
* 
*                   READ AND OUTPUT DMA WORD COUNT
* 
DMAW0 NOP 
      STA AREG      SAVE A REGISTER 
      CPA .2        IS IT CHANNEL 2?
      JMP DMAW4     YES-OK
      CPA .3        NO-IS IT CHANNEL 3? 
      JMP DMAW4     YES-OK
      LDA .2        NO-DEFAULT TO CHANNEL 2 
      STA AREG      SAVE IT 
DMAW4 EQU * 
      LDA DMAW1     SETUP DMA CHANNEL 
      ADA AREG
      STA *+1 
      NOP           EXECUTE LIA FROM DMA CHANNEL
      STA DMAW2     SAVE DMA WORD COUNT 
      CLA,CLE 
      LDB DMAW3     OUTPUT DMA WORD COUNT MESSAGE 
      JSB FMTR2,I 
      CCA 
      LDB DMAW2     OUTPUT DMA WORD 
      JSB FMTR2,I 
      JMP DMAW0,I   EXIT
DMAW1 OCT 103500    LIA CH,C-COMMAND
DMAW2 NOP           DMA WORD COUNT
DMAW3 DEF *+1 
      ASC 09,DMA WORD COUNT #/
* 
* 
*                   READ RECORD 
RD0   NOP 
* 
*                   CHECK FOR SWITCH 7-CRCC SUPPRESS
* 
      LIA SW        LOAD THE SWITCH REGISTER
      AND SW07      ISOLATE SWITCH 7
      SZA           IS SWITCH 7 SET?
      CCA           YES-SET CRCC SKIP FLAG
      STA CRCFG     SET CRCC FLAG 
* 
      CLA 
      STA WRERR     CLEAR WRITE ERROR FLAG
      JSB SIOR,I    READ A RECORD 
      JSB ERRCK     CHECK FOR ERROR FLAG
      JMP RD0,I     EXIT
* 
*                   WRITE RECORD
* 
WR0   NOP 
      JSB .CKOT,I   CHECK FOR  OUTPUT BUFFER
* 
*                   CHECK FOR SWITCH 7-CRCC SUPPRESS
* 
      LIA SW        LOAD THE SWITCH REGISTER
      AND SW07      ISOLATE SWITCH 7
      SZA           IS SWITCH 7 SET?
      CCA           YES-SET CRCC SKIP FLAG
      STA CRCFG     SET CRCC FLAG 
* 
      CLA 
      STA RDERR     CLEAR READ ERROR FLAG 
      JSB SIOW,I    WRITE A RECORD
      JSB ERRCK     CHECK FOR ERROR FLAG
      JMP WR0,I     EXIT
* 
* 
*                   COMPUTE CRCC FROM OUTPUT BUFFER 
* 
CRCO0 NOP 
      JSB .CKOT,I   CHECK FOR  OUTPUT BUFFER
      LDA FWAM      LOAD BUFFER ADDRESS 
                                                                                                                                                                          