* * * 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