* 
*     *   STORE INTO DATA BUFFER ROUTINE  * 
* 
*         *    STORES A & B REGISTERS INTO DATA BUFFER STARTING 
*              WITH BUFFER WORD 0. STORES A AND THEN B INTO NEXT
*              SUCCESSIVE LOCATION AND INCREMENTS POINTER. THE
*              NEXT CALL PUTS A & B INTO NEXT BUFFER WORD AND 
*              WORD + 1 RESPECTIVELY. POINTER MUST BE SET TO
*              BUFFER WORD 0 UPON ENTRY INTO THIS ROUTINE.
* 
*              CALLING SEQUENCE : 
* 
*              LDA PBUF1      SET BUFFER
*              STA TBUFF       POINTER TO WORD 0 OF BUFFER
*              LDA 1ST WORD (8 BIT ADDRESS)(8 MSB OF MICROWORD) 
*              LDB 2ND WORD (16 LSB OF MICROWORD) 
*              JSB STORE
*              LDA NEXT WORD
*              LDB NEXT WORD+1
*              FINISHED FILLING BUFFER? 
*              JMP *-4        NO,LOOP UNTIL FINISHED
*              CONTINUE 
* 
STORE NOP 
      STA TBUFF,I   STORE A IN DATA 
      ISZ TBUFF      BUFFER WORD N
      STB TBUFF,I     AND B IN DATA 
      ISZ TBUFF        BUFFER WORD N+1
      JMP STORE,I 
      HED WBUFF 
* 
*     *   WRITE DATA BUFFER ONTO WCS ROUTINE  * 
* 
*         *    WRITES THE CONTENTS OF THE DATA BUFFER ONTO WCS
*              RAMS ACCORDING TO ADDRESSES CONTAINED IN THE 
*              DATA. USES SUBROUTINE WRITE. 
* 
*              CALLING SEQUENCE : 
* 
*              JSB WBUFF
* 
WBUFF NOP 
      LDA .M256     SET ADDRESS 
      STA TEMP3      COUNTER
      LDA PBUF1       AND DATA
      STA TBUFF        BUFFER POINTER 
WLOOP EQU * 
      LDA TBUFF,I   LOAD A & B
      ISZ TBUFF      REGISTERS WITH 
      LDB TBUFF,I     BUFFER CONTENTS 
      ISZ TBUFF 
      JSB WRITE     WRITE ONTO WCS
      ISZ TEMP3     DONE? 
      JMP WLOOP     NO,CONTINUE 
      JMP WBUFF,I   YES 
      HED COMP
* 
*     *   COMPARISON ROUTINE   *
* 
*         *    READ WCS MODULE WORD BY WORD AND COMPARES CONTENTS 
*              TO CORRESPONDING VALUE IN THE DATA BUFFER. REPORTS 
*              MIS-COMPARISONS AS ERROR MESSAGE E004. USES
*              SUBROUTINES READ AND FORM. 
* 
*              CALLING SEQUENCE : 
* 
*              JSB COMP 
* 
COMP  NOP 
      LDA .M256     SET ADDRESS 
      STA TEMP3      COUNTER
      LDA PBUF1       AND DATA
      STA TBUFF        BUFFER POINTER 
CLOOP EQU * 
      LDA TBUFF,I   GET ADDRESS 
      AND MASK3      LHJ IN A 
      STA TEMP2       REGISTER &
      JSB READ         READ CONTENTS
      AND MASK2     GET RID OF DON'T CARES
      IOR TEMP2      IN ADDRESS FIELD 
      STA AREG1     SAVE
      STB BREG1      READINGS 
      CPA TBUFF,I   COMPARE 
      RSS            DATA IN
      JMP CERR1       A & B 
      ISZ TBUFF        REGISTERS
      CPB TBUFF,I       TO DATA 
      RSS                THAT WAS 
      JMP CERR2 
CONTD ISZ TBUFF 
      ISZ TEMP3     DONE? 
      JMP CLOOP     NO,CONTINUE 
      CLA           YES,CLEAR E004
      STA CFLAG      REPORTING FLAG 
      STA EFLAG       AND H030,H031 FLAG
      LDA PP4       RESTORE 
      STA PMSG4,I    FULL E004 MESSAGE
      JMP COMP,I
CERR1 EQU * 
      ISZ TBUFF     ARRANGE FOR FORM
CERR2 EQU * 
      JSB FORM      FORM PARAMETERS FOR MSG E004
      ISZ CFLAG     ALREADY PRINTED ENTIRE E004?
      JMP CCOMP     NO,PRINT ENTIRE E004
      LDA PP4A      YES,ONLY PRINT E004 PARAMETERS
      STA PMSG4,I 
      CCA           SET HOLD OFF FLAG 
      STA EFLAG      FOR H030 AND H031
CCOMP EQU * 
      LDA SP2       PUT SPACES
      LDB PP4A       IN 1ST THREE 
      STA B,I         DIGITS OF 
      INB              ADDRESS PORTION
      LDA B,I           OF ERROR
      AND MASK2         MESSAGE E004
      IOR SPACE 
      STA B,I 
E004  JSB ERROR     "BAD COMPARISON + PARAMETERS" 
      CCA           RESET E004
      STA CFLAG      REPORTING FLAG 
      JMP CONTD     CONTINUE COMPARISONS
      HED FORM
* 
*     *   FORM PARAMETERS ROUTINE  *
* 
*         *    CONVERTS AND PLACES ADDRESS AND DATA VALUES IN 
*              APPROPRIATE PORTIONS OF MESSAGE E004.
* 
*              CALLING SEQUENCE : 
* 
*              STA TEMP2      ADDRESS READ IN TEMP2 
*              LDA DATA READ
*              LDB DATA READ
*              JSB FORM 
* 
FORM  NOP 
      STA TEMPA     SAVE
      STB TEMPB      A & B
      CLE 
      LDA LDA1B     START WITH
      STA LDAIN      DATA READ
      LDA TEMP2     GET ORIGINAL MODULE ADDRESS 
      ALF,ALF       CONVERT ADDRESS 
      LDB PP4A       TO ASCII AND 
      JSB C.124,I     PACK INTO MESSAGE E004
FLOOP EQU * 
      CLE           CONVERT 16 LSB TO 
      LDA TEMPB      ASCII AND PLACE
      LDB POCT3       INTO 2ND HALF 
      JSB C.124,I      OF WORK AREA 
      CLE           CONVERT 
      LDA TEMPA      8 MSB TO 
      AND MASK2       ASCII AND PLACE 
      LDB POCT1        IN 1ST HALF OF 
      JSB C.124,I       WORK AREA 
      LDA POCT2     POINT TO PORTION
      STA TEMP6      OF WORK AREA FOR E004
LDAIN NOP           POINT INTO APPROPRIATE
      STA POINT      AREA IN E004 
      LDA M3        SET 
      STA TEMP5      COUNTER
      LDA TEMP6,I   GET PARAMETER 
      AND MASK2      VALUE
      ALF,ALF         AND PACK
      ISZ TEMP6        INTO ERROR 
      LDB TEMP6,I       MESSAGE E004
      SWP                IN THE FORM: 
      ALF,ALF 
      AND MASK2           XXX.XXXXXX(OCTAL) 
      IOR B 
      STA POINT,I 
      LDA TEMP6,I 
      AND MASK2 
      ALF,ALF 
      IOR DECPT 
      ISZ POINT 
      STA POINT,I 
FNEXT EQU * 
      ISZ POINT 
      ISZ TEMP6 
      LDA TEMP6,I 
      STA POINT,I 
      ISZ TEMP5     DONE? 
      JMP FNEXT     NO,CONTINUE 
      ISZ POINT     YES 
      LDA POINT     DONE
      CPA EP4C       BOTH PARAMETERS? 
      JMP FORM,I    YES 
      LDA LDA1C     NO
      STA LDAIN 
      LDB TBUFF     GET DATA
      ADB M1         WRITTEN AND
      LDA B,I         GO BACK AND 
      LDB TBUFF,I      PACK INTO
      STA TEMPA         E004
      STB TEMPB 
      STA AREG2 
      STB BREG2 
      JMP FLOOP 
      HED USELT 
* 
*     *   USER SELECTION ROUTINE  * 
* 
*         *    ALLOWS USER TO SELECT TEST SECTIONS TO BE RUN. 
*              PROGRAM HALTS 102075 AND USER ENTERS TESTS HE
*              DESIRES IN A REGISTER. SET BIT 0 MEANS RUN 
*              TST00,BIT 1 MEANS RUN TST01,ETC. A REGISTER
*              CONTAINS CURRENT TESTS TO BE RUN WHEN HALTED 
*              102075.
* 
*              CALLING SEQUENCE : 
* 
*              JSB USELT
* 
USELT NOP 
GOOF  LDA TESTS     LOAD CURRENT TESTS
      CLB 
HLT75 HLT 75B       HALT TO ENTER NEW TESTS 
      AND MASK5     GET RID OF DON'T CARES
      STA TEMPA 
      SZA,RSS       IS ENTRY VALID? 
      JMP GOOF      NO,TRY AGAIN
      LDA TEMPA     YES 
      STA TESTS     SAVE TEST 
      STA SECT       SELECTION
      LDB BIT9      CLEARED 
      JSB SWRG       BIT9?
      JMP GOOF      NO,TRY AGAIN
      JMP BACK,I    RESTART PASS WITH NEW TESTS 
      HED TMSG
* 
*     *   TEST MESSAGE ROUTINE  * 
* 
*         *    PUTS CURRENT CONTROL STORE MODULE AND TEST ROUTINE 
*              IN MESSAGE H030. 
* 
*              CALLING SEQUENCE : 
* 
*              LDA TEST ROUTINE # (0 THRU 5)
*              JSB TMSG 
* 
TMSG  NOP 
      LDB ROUT      FIND CURRENT
      ADB A          TEST ROUTINE 
      LDA B,I         AND PUT IT
      STA PP6B,I       IN MESSAGE H030
      CLE 
      LDA MOD       CONVERT CURRENT 
      LDB POCT1      CONTROL STORE MODULE 
      JSB C.124,I     # TO ASCII IN WORK AREA 
      LDB POCT4     PUT IT
      LDA B,I        IN MESSAGE 
      LDB PP6A        H030
      STA B,I 
      JMP TMSG,I
      HED CSTEP 
* 
*     *   CURRENT STEP ROUTINE   *
* 
*         *    CHECKS FOR LOOP,HALT ON STEP AND/OR CAPTURES STEP
*              RETURN POINT,UPDATES STEP # AND PUTS STEP # IN H030
*              DEPENDING ON ENTRY POINT.
* 
*              CALLING SEQUENCE : 
* 
*              JSB CSTEP
* 
*              OR 
* 
*              JSB SSTEP     UPDATES STEP # 
* 
CSTEP NOP 
      LDA STEP      CHECK TO INSURE CURRENT 
      SZA,RSS        STEP # NOT = 0 
      JMP CNEXT     STEP # = 0. GO DO STEP 1 FIRST
      LDB BIT2      HALT ON 
      JSB SWRG       STEP?
      RSS 
      JMP HLT50+1   NO
      LDA STEP      YES,GET STEP #
      CLB            IN A REGISTER
HLT50 HLT 50B 
      CLA           CLEAR ERROR 
      STA ERCNT      COUNTER
      LDB BIT3      LOOP ON 
      JSB SWRG       STEP?
      JMP SAVES,I   YES 
      JMP CNEXT 
SSTEP NOP           SECOND ENTRY
      LDA SSTEP      POINT
      STA CSTEP 
CNEXT EQU * 
      LDA CSTEP     SAVE CURRENT
      STA SAVES      STEP RETURN POINT
      LDA STEP      INCREMENT 
      INA            STEP # 
      STA STEP
      CLE           PUT 
      LDB POCT1      STEP # IN
      JSB C.124,I     H030
      LDB POCT4 
      LDA B,I 
      LDB PP6C
      STA B,I 
      LDB PP4AA     NOW PUT IT
      STA B,I        IN E004
      LDB PP7       NOW PUT IT
      STA B,I        IN E007
      LDB PP5       NOW PUT IT
      STA B,I        IN E005
      CLA           CLEAR ERROR 
      STA ERCNT      COUNTER
      STA AREG1     CLEAR 
      STA BREG1      REPORTING
      STA AREG2       REGISTERS 
      STA BREG2 
      JMP CSTEP,I 
      HED ROLL
* 
*     *   ROLL UP BUFFER ROUTINE   *
* 
*         *    ROLLS DATA BUFFER UP ONE MICROWORD. RETURNS UNTIL
*              THE END OF BUFFER IS REACHED AND THEN RETURNS + 1. 
* 
*              CALLING SEQUENCE : 
* 
*                    LDA START OF BUFFER
*                    STA SAVE2
*              LOOP  EQU *
*                    JSB ROLL 
*                    JMP LOOP 
* 
ROLL  NOP 
      LDA SAVE2,I   GET THE 
      ISZ SAVE2      WORD OF
      LDB SAVE2,I     INTEREST
      ISZ SAVE2 
      STA SAVE1 
      STB SAVE3 
      LDA SAVE2     POINT BACK TO 
      ADA M2         BUFFER LOCATION
      STA TBUFF       WE CAME FROM
      LDA SAVE1     COMPLEMENT
      XOR MASK2      DATA PATTERN 
      CMB             AND STORE IN
      JSB STORE        FIRST LOCATION 
      LDA SAVE1     MOVE WORD 
      ADA IADDR      OF INTEREST
      LDB SAVE3       UP ONE IN 
      JSB STORE        BUFFER 
      LDA SAVE2 
      CPA PBUF4     END OF BUFFER?
      RSS           YES 
      JMP ROLL,I    NO,RETURN 
      ISZ ROLL
      JMP ROLL,I    RETURN + 1 WHEN DONE ALL BUFFER 
      HED ROTE
* 
*     *   ROTATE DATA PATTERN ROUTINE  *
* 
*         *    ROTATES 24 BIT DATA PATTERN IN A & B REGISTERS.
*              DOES NOT AFFECT ADDRESS BITS IN A. 
* 
*              CALLING SEQUENCE : 
* 
*              LDA 1ST WORD (8 BIT ADDRESS)(8 BITS OF DATA PATTERN) 
*              LDB 2ND WORD (16 BITS OF DATA PATTERN) 
*              JSB ROTE 
* 
*              RETURNS WITH 24 BIT DATA PATTERN ROTATED ONE LEFT. 
*              ADDRESS BITS REMAIN THE SAME.
* 
ROTE  NOP 
      STA TEMPA 
      STB TEMPB 
      ALF,ALF       GET BIT 23
      AND BIT15      OF MICROWORD 
      RAL             INTO
      STA SAVE1        STORAGE
      LDA TEMPB     GET BIT 15
      AND BIT15      OF MICROWORD 
      RAL             INTO
      STA TEMP2        STORAGE
      LDA TEMPA 
      AND MASK3 
      SWP 
      LDA TEMPA 
      RAL 
      AND MASK7 
      IOR TEMP2 
      AND MASK2 
      IOR B         FORM
      STA TEMPA      A REGISTER 
      LDA TEMPB 
      RAL 
      AND MASK7 
      IOR SAVE1     FORM
      LDB A          B REGISTER 
      LDA TEMPA 
      JMP ROTE,I
      HED DRITE 
* 
*     *   WRITE INTO WCS VIA DMA ROUTINE   *
* 
*         *    WRITES DATA BUFFER INTO WCS USING DMA CHANNEL 1. 
* 
*              CALLING SEQUENCE : 
* 
*              JSB DRITE
* 
DRITE NOP 
      LDA CW1DW     INITIALIZE
      OTA 6B         DMA TO 
      CLC 2B          TRANSFER THE
      LDA CW2DW        512 WORD DATA
      OTA 2B            BUFFER TO 
      STC 2B             WCS
      LDA CW3DW 
      OTA 2B
      STC 6B,C
STF6  STF WCS 
CLF3  CLF WCS 
      SFS 6B        DONE? 
      RSS 
      JMP DRITE,I   YES,RETURN
      ISZ TEMP8     NOT YET,TIMED OUT?
      JMP CLF3+1    NO,KEEP TRYING
E010  JSB ERROR     YES,"DMA NOT COMP"
      JMP DRITE,I 
      HED ALT 
* 
*     *   ALTERNATE DATA PATTERN ROUTINE   *
* 
*         *    COMPLEMENTS EACH PATTERN IN DATA BUFFER. ADDRESS 
*              FIELD REMAINS UNCHANGED. 
* 
*              CALLING SEQUENCE : 
* 
*              JSB SET2 
*              JSB ALT
* 
ALT   NOP 
      LDA .M256     SET 
      STA TEMP1      COUNTER
ALOOP EQU * 
      LDA TBUFF,I   GET BUFFER
      XOR MASK2      WORD AND COMPLEMENT
      STA TBUFF,I     DATA PATTERN
      ISZ TBUFF 
      LDB TBUFF,I   DO NEXT 
      CMB            BUFFER WORD
      STB TBUFF,I 
      ISZ TBUFF 
      ISZ TEMP1     DONE ENTIRE BUFFER? 
      JMP ALOOP     NO,CONTINUE 
      JMP ALT,I     YES 
      HED SET1,SET2,SET3
* 
*     *   SET COUNTERS ROUTINES  *
* 
*         *    SETS COUNTERS TO THE COUNT IN THE A REGISTER.
*              SETS TEMP1,4,7,8,9 OR POINTS TBUFF TO THE DATA 
*              BUFFER DEPENDING ROUTINE USED. 
* 
*              CALLING SEQUENCE : 
* 
*              LDA COUNT
*              JSB SET1       INITALIZES TEMP1, TEPM4 & TBUFF 
* 
*              OR 
* 
*              JSB SET2       INITIALIZES TBUFF 
* 
*              OR 
* 
*              LDA COUNT
*              JSB SET3       INITIALIZES TEMP7, TEPM8 & TEMP9
* 
SET1  NOP 
      STA TEMP1     INITIALIZE
      STA TEMP4      TEMP1 AND TEMP4
      JMP SET1,I
* 
SET2  NOP 
      LDA PBUF1     SET TBUFF TO
      STA TBUFF      POINT TO DATA BUFFER 
      JMP SET2,I
* 
SET3  NOP 
      STA TEMP7     INITIALIZE
      STA TEMP8      TEMP7, 
      STA TEMP9       TEMP8,
      JMP SET3,I       AND TEMP9
      HED IBUFF 
* 
*     *   INITIALIZE DATA BUFFER ROUTINE   *
* 
*         *    SETS POINTERS TO BUFFER TO BE USED FOR THE DATA
*              BUFFER BASED ON B REGISTER.
* 
*              CALLING SEQUENCE : 
* 
*              LDB (POINTER TO BUFFER TO BE USED) 
*              JSB IBUFF
* 
*              IF MACHINE IS A 2100,THE 21XX MICROPROGRAM BUFFER
*              AREA WILL BE USED AS THE DATA BUFFER. IF THE MACHINE 
*              IS A 21XX,THE 2100 MICROPROGRAM BUFFER AREA WILL BE
*              USED AS THE DATA BUFFER. 
* 
IBUFF NOP 
      LDA M4        SET 
      STA TEMP0      COUNTER
ILOOP EQU * 
      LDA B,I       GET POINTER 
      INB 
      STA DBUF3,I   STORE IN DATA POINTER LOCATION
      ISZ DBUF3 
      ISZ TEMP0     DONE? 
      JMP ILOOP     NO
      LDA DBUF3     YES,RESET DBUF3 FOR POSSIBLE
      ADA M4         RESTART WITH 
      STA DBUF3       CONFIGURATION 
      JMP IBUFF,I 
      HED NOERR 
* 
*     *   TURN OFF ERRORS UNTIL NEXT STEP ROUTINE  *
* 
*         *    LOOKS UP NEXT STEP ADDRESS AND JUMPS THERE.
* 
*              CALLING SEQUENCE : 
* 
*              JSB NOERR
* 
NOERR NOP 
      LDB BIT3      TRYING TO LOOP
      JSB SWRG       ON STEP? 
      JMP NOERR,I   YES,CONTINUE LOOP 
      LDA SAVES     GET CURRENT STEP RETURN POINT 
      LDB STAB      GET STEP TABLE POINTER
NLOOP EQU * 
      CPA B,I       FOUND CURRENT STEP? 
      JMP NN.1      YES 
      INB           NO,BUMP TABLE 
      JMP NLOOP      POINTER & LOOK AGAIN 
NN.1  EQU * 
      CPA LAST0     ON LAST STEP IN TEST? 
      JMP NN.2      YES 
      CPA LAST1 
      JMP NN.2
      CPA LAST2 
      JMP NN.2
      CPA LAST3     LAST STEP?
      JMP NN.4      YES 
      INB           NO,GET
      LDA B,I        NEXT STEP
      ADA M1          ADDRESS AND 
      STA NOERR     SAVE FOR JUMP 
NN.3  EQU * 
      CLC 0,C       TURN OFF INTERRUPT,CLEAR I/O
      LDA 5B        RESTORE TRAP
      STA 6B         CELL HALT
      LDA TRSS      RESTORE SKIP INSTRUCTION
      STA PTJMP,I    FOR STEP 21
      CLA           CLEAR 
      STA EFLAG      ERROR & COMP 
      STA CFLAG       FLAGS 
      LDA PP4       RESTORE E004 FOR
      STA PMSG4,I    POSSIBLE FUTURE USE
      JMP NOERR,I   JUMP TO NEXT STEP 
NN.2  EQU * 
      LDA SRTRN     SET TO
      STA NOERR      RETURN IN START
      JMP NN.3
NN.4  EQU * 
      LDA SRTRN     SET TO RETURN 
      STA NOERR      IN START AND 
      JSB REMOD       RESTORE 2100 MICROCODE
      JSB PREMX,I   RESTORE 21XX MICROCODE
      JMP NN.3
      HED FPARM 
* 
*     *   FORM PARAMETERS ROUTINE  *
* 
*         *    FORMS ASCII VALUES FOR PARAMETERS IN MESSAGE H031. 
* 
*              CALLING SEQUENCE : 
* 
*              DEPENDS ON:
* 
*                 TEMPA = A REG AFTER MACRO 
*                 TEMPB = B REG AFTER MACRO 
*                 TEMP7 = WHAT A REG SHOULD BE
*                 TEMP8 = WHAT B REG SHOULD BE
*                 BMAC  = MACRO USED
* 
*              JSB FPARM
* 
FPARM NOP 
      LDA TEMPA     FORM
      STA AREG1      A REG
      CLE             AFTER MACRO 
      LDB PP9B
      JSB C.124,I 
      LDA TEMPB     FORM
      STA BREG1      B REG
      CLE             AFTER MACRO 
      LDB PP9D
      JSB C.124,I 
      CLE           FORM
      LDA TEMP7     WHAT A
      LDB PP9C        SHOULD BE 
      JSB C.124,I 
      CLE           FORM
      LDA TEMP8      WHAT B 
      LDB PP9E        SHOULD BE 
      JSB C.124,I 
      LDA BMAC      FORM
      STA BREG2      MACRO
      CLE 
      LDB PP9A
      JSB C.124,I 
      JMP FPARM,I 
      HED ER005,ER007 
* 
*     *   REPORT ERRORS E005 & E007 ROUTINES  * 
* 
*         *    REPORTS E005 OR E007 DEPENDING ON WHICH IS 
*              CALLED.
* 
*              CALLING SEQUENCE : 
* 
*              STA TEMPA(A REG AFTER MACRO) 
*              STB TEMPB(B REG AFTER MACRO) 
*              LDA BAD MACRO(MACRO USED WHEN ERROR OCCURRED)
*              STA BMAC 
*              JSB ER005 OR E007
* 
ER005 NOP 
      JSB FPARM     GO FORM PARAMETERS FOR H031 
E005  JSB ERROR     "NO MAC"
      JMP ER005,I 
* 
ER007 NOP 
      JSB FPARM     GO FORM PARAMETERS FOR H031 
E007  JSB ERROR     "BAD MAC" 
      JMP ER007,I 
      HED L2100,L21XX 
                    