*     CAUSE OF THE ERROR BY CHECKING THE T REGISTER WHICH WILL
*     CONTAIN THE ERROR CODE, AND THE Y REGISTER, WHICH WILL CONTAIN
*     THE ADDRESS OF THE ERROR
      SKP 
      ORG 16000B
TST17 EQU * 
      SPC 1 
      NOP 
      JSB KFNCE     LOAD FENCE REGISTERS
      JSB ZORCH          JSB'S INTO TRAP CELLS
      JSB LODUP          AND MAP REGISTERS
      SPC 1 
      LDB TWNTK     CHANGE THE SOURCE 
      JSB PEMAD,I    ADDRESS'S PATTERN
      LDB TWN2K     AND ZERO
      JSB PZERO,I    THE DESTINATION
      LDA PRET1     PUT INTERRUPT RETURN
      STA ADLNK      IN TRAP CELL 
      CCA           SET INTERRUPT 
      STA PHLAG      CHECK FLAG 
      JSB PSTUP     SET UP FOR INTERRUPT
      JSB PINIT,I   RESET TESTGG PATTERN TABLE
      LDA FORTK      NOW SETUP
      LDB FORTK      TO EXECUTE 
      LDX FOURK      MOVE BYTES FROM INSTRUCTION
      SJP *+2       ENABLE THE SYSTEM 
      STF INTP      START THE INTERRUPT 
      MBF           AND EXECUTE.
      NOP           CHANGE TO JMP *-N FOR LOOP/ 
      CAY           SAVE THE A REGISTER 
      JSB TRNOF 
      LDA PHLAG     GET THE FLAG
      SZA            WAS THE INTERRUPT PROCESSED? 
      JSB CRASH      NO, GO ABORT TST17 
      LDA TWN2K     NOW MAKE
      LDB TWNTK      SURE THAT
      LDX NON2K      THE INSTRUCTION
      JSB PCOMP,I    COMPLETED EXECUTION
      JSB *+2        WHOOPS, FOUND AN ERROR,
      JMP PNXT1      TBCMP OK, CONTINUE 
      NOP           JSB ADDRESS HOLDER
      JSB RGSVE     SAVE THE RESISTERS
      LDY *-2        GET THE ERROR FLAG 
      JSB ERMS,I    AND REPORT
      DEF E255
      JSB RGRS2     RESTORE X AND Y 
      SPC 1 
      JMP .PCOM,I 
PNXT1 CCA           RESET THE 
      STA PHLAG      INTP FLAG
      LDB TWN2K     CHANGE
      JSB C.PTN,I    PATTERNS 
      LDB TWNTK      IN SOURCE
      JSB PZERO,I    AND DESTINATION
      JSB PSTUP     SET UP TO INTERRUPT 
      LDA FORTK      NOW SET UP 
      LDB FORTK      TO EXECUTE 
      LDX FOURK      MOVE BYTES INTO INSTRUCTION
      SJP *+2       ENABLE THE SYSTEM 
      STF INTP      START THE INTERRUPT 
      MBI           AND EXECUTE MBI 
      NOP           CHANGE TO JMP *-N FOR LOOP/ 
      CAY           SAVE A
      LDA PHLAG     GET THE FLAG
      SZA           DID IT INTERRUPT? 
      JSB CRASH      NO, CRASH
      JSB TRNOF 
      LDA TWNTK      VERIFY 
      LDB TWN2K      THAT 
      LDX NON2K      THE CORRECT
      JSB PCOMP,I    NUMBER OF BYTES WERE MOVED 
      JSB *+2        NO, REPORT 
      JMP PNXT2      YES, OVER THE ERROR
      NOP 
      STY SVPD4      SAVE Y 
      LDY *-3        AND GET FAIL FLAG
      JMP .PCOM,I 
      SPC 1 
      JSB ERMS,I        REPORT
      DEF E265
      LDY SVPD4      RESTORE Y
      JMP .PCOM,I    AND FINISH TBCMP 
      SPC 1 
PNXT2 CCA           RESET THE 
      STA PHLAG      INTERRUPT FLAG 
      LDA FORTK     SET UP
      LDB FOR4K      FOR A
      LDX FOURK      MBI INSTRUCTION
      JSB PSTUP     SET UP FOR INTERRUPT
      SJP *+2       TURN ON SYSTEM
      STF INTP      INITIATE AN INTERRUPT 
      MBW           AND EXECUTE 
      NOP 
      CAY           SAVE A
      LDA PHLAG     GET INTP FLAG 
      SZA           INTERRUPT PROCESSED?
      JSB CRASH      NO, CRASH
      JSB TRNOF 
      LDA TWNTK     VERIFY
      LDB TWN4K      MBW
      LDX NON2K 
      JSB PCOMP,I    COMPLETED CORRECTLY
      JSB *+2        NO, REPORT THE ERROR 
      JMP PNXT3      YES, CONTINUE
      NOP 
      STY SVPD4     SAVE Y
      LDY *-3       GET FAIL FLAG 
      JSB ERMS,I    REPORT THE
      DEF E256      ERROR 
      LDY SVPD4     RESTORE Y 
      JMP .PCOM,I    AND CONTINUE 
      SPC 1 
PNXT3 CCA           RESET INTP
      STA PHLAG      CHECK FLAG 
      LDA TWNTK     CHANGE
      JSB C.PTN,I    SOURCE PATTERN 
      LDA TWNTK     SET UP TO 
      LDB TWNTK      EXECUTE AN 
      LDX OCT2K      MWF INSTRUCTION
      JSB PSTUP     SET UP TO INTERRUPT 
      STF INTP      INITIATE AN INTERRUPT 
      MWF           AND EXECUTE THE 
      NOP           DEBUG 
      CAY           SAVE A
      LDA PHLAG     GET THE INTP CHECK FLAG 
      SZA           WAS THE INTERRUPT PROCESSED?
      JSB CRASH      NO, ABORT TST17
      JSB TRNOF 
      LDA TWN2K     AND MAKE SURE 
      LDB TWNTK     THAT MWF
      LDX NON2K     COMPLETED CORRECTLY 
      JSB PCOMP,I 
      JSB *+2       ERROR FOUND, REPORT IT
      JMP PNXT4     GCOMP COMPLETE, OVER THE ERROR
      NOP 
      STY SVPD4     SAVE Y
      LDY *-3       GET FAIL FLAG 
      JSB ERMS,I    AND REPORT
      DEF E257
      LDY SVPD4     RESTORE Y 
      JMP .PCOM,I    AND CHECK MORE 
      SPC 1 
PNXT4 CCA           RESET 
      STA PHLAG     PHLAG 
      LDA TWN2K     CHANGE THE SOURCE 
      JSB C.PTN,I    PATTERN
      LDA TWNTK     SET UP TO 
      LDB TWNTK      EXECUTE A
      LDX OCT2K      MWI INST.
      JSB PSTUP     SETUP TO INTERRUPT
      STF INTP       ON INTP
      MWI           EXECUTE MWI 
      NOP           DEBUG 
      CAY           SAVE A
      LDA PHLAG     WAS INTERRUPT 
      SZA            PROCESSED? 
      JSB CRASH      NO, ABORT THE TEST 
      JSB TRNOF 
      LDA TWNTK     CHECK 
      LDB TWN2K      COMPLETION 
      LDX NON2K       OF THE
      JSB PCOMP,I     MWI INSTRUCTION 
      JSB *+2       FAILURE DETECTED, REPORT
      JMP PNXT5     COMPLETED OK, CONTINUE
      NOP 
      STY SVPD4     SAVE Y
      LDY *-3        AND GET THE FAILURE FLAG 
      JSB ERMS,I    THEN REPORT 
      DEF E260
      LDY SVPD4      RESTORE Y
      JMP .PCOM,I    AND BACK FOR MORE
      SPC 1 
PNXT5 CCA           RESET 
      STA PHLAG     PHLAG 
      LDA TWNTK     CHANGE THE
      JSB C.PTN,I    SOURCE PATTERN 
      LDA TWNTK     NOW SET UP
      LDB TWN2K      TO EXECUTE 
      LDX OCT2K       AN MWW INST 
      JSB PSTUP     PRESET FOR AN INTERRUPT 
      STF INTP       NOW INITIATE AN INTERRUPT
      MWW           AND EXECUTE THE INSTRUCTION 
      NOP 
      CAY           SAVE A
      LDA PHLAG     GET INT PROCESS FLAG
      SZA           WAS INTERRUPT PROCESSED?
      JSB CRASH     NO, CRASH 
      JSB TRNOF 
      LDA TWNTK 
      LDB TWN4K      VERIFY 
      LDX NON2K      MWW COMPLETED
      JSB PCOMP,I    AFTER THE INTERRUPT
      JSB *+2       WHOOPS, SOMETHING'S WRONG 
      JMP PNXT6     MWW WAS SUCCESSFUL, CONTINUE
      NOP 
      STY SVPD4     SAVE GCOMP'S XTHRU COUNTER
      LDY *-3       GET FAIL-FLAG 
      JSB ERMS,I     AND REPORT 
      DEF E261
      LDY SVPD4     RESTORE Y 
      JMP .PCOM,I    AND BACK FOR MORE
      SPC 1 
PNXT6 CCA           SET INTP
      STA PHLAG      CHECK FLAG 
      CLA           SET UP
      CLB            TO TRY 
      LDX OC177       XMS 
      JSB PSTUP     SET UP FOR AN INTERRUPT 
      STF INTP       TURN INTERRUPT SYSTEM ON 
      XMS           AND EXECUTE XMS 
      NOP 
      LDA PHLAG     MAKE SURE 
      SZA            INT WAS PROCESSED
      JSB CRASH     NO, ABORT THE TEST
      JSB TRNOF 
      CLA           READ
      LDB RTSYS      BACK 
      LDX NO177       THE MAP 
      XMM              REGISTERS
      JSB SQALL     MAKE A TABLE TO COMPARE 
      SPC 1 
      JSB .ALCP,I   MAKE SURE XMSW COMPLETED
      JSB *+2       ERROR DETECTED
      JMP PNXT7     COMPARE OK, CONTINUE
      NOP 
      STY SVPD4     SAVE Y
      LDY *-3       GET THE ERROR FLAG
      JSB ERMS,I
      DEF E262
      LDY SVPD4     NOW RESTORE Y 
      JMP TCPHR     AND BACK FOR MORE 
      SPC 1 
PNXT7 CCA           SET 
      STA PHLAG       PHLAG 
      JSB RDZRO     ZERO THE READ TABLE 
      CLA           NOW XMM 
      LDB RTSYS      MAPS TO
      LDX NO177      MEMORY 
      JSB PSTUP     PRESET INTP 
      STF INTP      ON INTP AND SYS 
      XMM           AND EXECUTE 
      NOP 
      CAY           SAVE A
      LDA PHLAG     INTP PROCESSED
      SZA            ???
      JSB CRASH     NO, ABORT 
      JSB TRNOF 
      JSB SQALL     VERIFY COMPLETION 
      JSB .ALCP,I 
      JSB *+2       ERROR DISCOVERED
      JMP PNXT8     NO ERROR DISCOVERED, GO ON
      NOP 
      STY SVPD4     SAVE Y
      LDY *-3       GET ERROR FLAG
      JSB ERMS,I    REPORT
      DEF E263
      LDY SVPD4     RESTORE 
PNXT8 NOP 
      JMP TST17,I 
      SKP 
      SPC 3 
      SPC 3 
PRET1 DEF PRED1 
PHLAG OCT 0 
.ALCP DEF ALCMP 
PCOMP DEF GCOMP 
.PCOM DEF .GCOM 
PEMAD DEF MEMAD 
PZERO DEF GZERO 
PINIT DEF GINIT 
C.PTN DEF CHPTN 
      SPC 3 
CRASH NOP 
      JSB TRNOF 
      LDY CRASH      GET FAIL FLAG
      JSB ERMS,I     REPORT NO
      DEF E266       INTERRUPT OCCURRED 
      JMP TST17,I   AND ABORT TST17 
      SPC 2 
PRED1 NOP 
      CLF INTP      OFF INTP
PIO01 CLC DVICE      CLEAR
PIO02 CLF DVICE      DEVICE SC
      JSB RGSVE     SAVE ABX&Y
      CLA           CLEAR 
      STA PHLAG          PHLAG
      NOP 
      JSB RGRS1 
      JMP PRED1,I    EXIT 
      SPC 1 
PSTUP NOP 
PIO03 STF DVICE     TURN DVICE
PIO04 STC DVICE      READY, AND 
      SJP PSTUP,I   TURN SYSTEM ON & EXIT 
E255  ASC 5,E255 MBF/ 
E256  ASC 5,E256 MBW/ 
E257  ASC 5,E257 MWF/ 
E260  ASC 5,E260 MWI/ 
E261  ASC 5,E261 MWW/ 
E262  ASC 5,E262 XMS/ 
E263  ASC 5,E263 XMM/ 
E265  ASC 5,E265 MBI/ 
E266  ASC 14,E266 NO INTP, ABORTING TEST/ 
      HED EXTENDED MEMORY TEST
* 
*     TST23 
* 
*     TEST 23 IS A UTILITY PROGRAM OFFERED AS A QUICK CHECK OF
*     EXTENDED MEMORY.  IT IS NOT INTENDED TO BE USED AS A THOROUGH 
*     MEMORY DIAGNOSTIC, MERELY A VERIFICATION OF THE HARDWARE
*     AND FIRMWARE REQUIRED TO ACCESS MEMORY SIZES GREATER THAN 
*     32K WORDS.
* 
*     TEST 23 STARTS BY CALCULATING MEMORY SIZE, BUILDS A TABLE 
*     OF STARTING PAGE NUMBERS, AND THEN EXECUTING ONE PASS OF THE
*     DIAGNOSTIC ON ALL OF EXTENDED MEMORY, THEN EXITS BACK TO THE
*     CONTROL PROGRAM.
* 
*     IF AN ERROR IS DETECTED DURING THE EXECUTION OF THIS TEST, AN 
*     ERROR MESSAGE WILL BE OUTPUT ON THE CONSOLE, OR, A CODED
*     HALT WILL OCCUR SO THE OPERATOR WILL BE AWARE OF THE ERROR
*     AND CAN DETERMINE THE CAUSE OF THE ERROR BY EXAMINING THE A,B 
*     AND X REGISTERS WHICH WILL CONTAIN THE FOLLOWING INFORMATION: 
* 
*              T REGISTER = ERROR CODE
*              A RESISTER = EXPECTED VALUE
*              B RESISTER = ACTUAL VALUE
*            * X RESISTER = LOGICAL ADDRESS OF ERROR
* 
*   * TO CONVERT THE LOGICAL MEMORY ADDRESS TO A PHYSICAL MEMORY
*     ADDRESS, THE OPERATOR MUST REMBER THE FOLLOWING STEPS:
* 
*              1.  THE LOGICAL PAGE NUMBER IS CONTAINED IN THE
*                  MEMORY ADDRESS BITS 10-14.  CONVERT TO OCTAL 
*                  FOR LOGICAL PAGE NUMBER. 
* 
*              2.  SELECT THE CORRESPONDING MAP REGISTER.  THIS 
*                  CAN BE DONE BY SELECTING THE M-REGISTER, 
*                  SETTING M-REGISTER BITS 14 AND 15 TO ONE, AND
*                  M-REGISTER BITS 0-9 TO THE ADDRESS OF THE
*                  MAP REGISTER DESIRED.  WITHOUT PRESSING THE
*                  STORE SWITCH, SELECT THE T-REGISTER
*                  AT THIS TIME, THE T-REGISTER WILL CONTAIN
*                  THE CONTENTS OF THE MAP ADDRESSED BY THE 
*                  M-REGISTER.  THE CONTENTS OF THIS MAP REGISTER 
*                  IS THE PHYSICAL MEMORY PAGE NUMBER.
      SKP 
TST23 EQU * 
      SPC 1 
      NOP 
      LDA MEMO      GET MEMORY SIZE FROM THE CONFG. 
      AND XMASK     ELIMINATE OTHER OPTIONS 
      CPA XMASK     AT LEAST 32K? 
      JMP *+4       YEP, CONTINUE 
BOMBX JSB MSGC,I    NOPE, TELL OPERATOR HE CANT 
      DEF H317      RUN THIS TEST WITH LESS THAN 32K
      JMP TST23,I   AND EXIT
      JSB LODUP      LOAD UP MAPS 0-37
      SPC 1 
      LDA OCT40     INITIALIZE MAXIMUM
      STA MAXPG     PAGE COUNTER
      NOP           DEBUG 
TSTX1 LDA OCT10     STARTING W/REGISTER TEN,
      LDB MAXPG     AND FOR THE NEXT 24 
      LDX DEC24     PAGES, DEFINE MORE
      XMS           MEMORY
      SPC 1 
      LDY NEG24     INITIALIZE A PAGE COUNTER OF 24 
      LDB TWNTK     GET A PAGE 10 STARTING ADDRESS
      LDA PTRN1       AND A RECOGNIZABLE PATTERN
      SJP *+2       NOW ENABLE THE SYSTEM 
T23MS STA B,I       STORE PATTERN INTO 1. LOC OF
      LDA B,I         PAGE, READ IT BACK & CHECK THAT 
      SZA,RSS           IT IS NOT 000000 OR 177777
      JMP PATMS     PATTERN RETURNED IS 000000
      CMA 
      SZA,RSS 
      JMP PATMS     PATTERN STORED IS 177777
      ADB OCT2K     UPDATE B-REG TO BEGINNING OF NEXT PAGE
      LDA PTRN1     LOAD A-REG WITH PATTERN AGAIN 
      ISY             & INCREMENT PAGE COUNTER
      JMP T23MS 
      DJP *+2       DISABLE MEMORY
      LDA MAXPG     INCREASE STARTING ADDRESS OF MEMORY 
      ADA OCT30       BLOCK BY 24 PAGES & GO TO REDE- 
      STA MAXPG         FINE MEMORY BLOCK 
      JMP TSTX1     GO REDEFINE MEMORY
* 
PATMS DJP *+1       DISABLE MEMORY
      LDA TWNTK     DEDUCT THE 8K OF MEM ADDRESS IN THE 
      CMA,INA         BASE MEMORY, ATTACHED TO EVERY 24K
      ADB A             IN THE MEM MAP TO GET TRUE DISPLM ADDR
      BLF           CONVERT IT TO A TRUE PAGE DISPLM. 
      RBL,RBL         IN THE 24 PAGE BLOCK
      ADB MAXPG     ADD THE PAGE NUMBER SUPPLIED BY 24K MODULE
      LDA B         LOAD VALUE TO A-REG & CONVERT IT TO 
      CLE             ASCII FOR MESSAGE PRINT OUT 
      LDB MSP23 
      JSB I2AS,I
      JSB MSGC,I    PRINT MESSAGE TO CONSOLE
      DEF H327
* 
CMPLT DJP *+2        OFF THE SYSTEM 
      LDA MAXPG     GET DETECTED MAX+1 VALUE
      CMA,INA       MAKE IT 
      CMA           MAXIMUM PAGE
      STA MAXPG     SAVE THE MAXIMUM PAGE VALUE 
      STB XERRA      AND THE 'TOO BIG' VALUE IN B 
      LDB NXTBL     GET THE LAST TEMP TABLE ADDRESS 
OTRLP STA B,I        STORE IN TEMPTABLE 
      ADA NEG24     SUBTRACT 24 FOR NEXT TIME THRU
      STA XXTMP     SAVE IN CASE NO END 
      ADA NON40     USED UP?
      SSA           YES, ALL GONE 
      JMP XXARO     GO FINISH UP
      LDA XXTMP     NO, GET VALUE BACK
      ADB NEG01     UPDATE THE POINTER
      JMP OTRLP     AND DO AGAIN
XXARO LDA TABLE     SET UP A POINTER
      STA XTABL     TO THE FIRST PAGE TABLE 
      LDA OCT40     START WITH PAGE 40
      STA XTABL,I   PUT IN THE TABLE
      ISZ XTABL     BUMP TABLE POINTER
      LDA B,I       CHECK IF ONLY 64K 
      CPA MAXPG      IS PRESENT 
      JMP MRKER      PUT END OF TABLE MARKER
INRLP INB           BUMP POINTER TO NEXT PAGE 
      LDA B,I       GET THE NEXT STARTING PAGE
      STA XTABL,I    AND PLACE IT IN THE TABLE
      CPA MAXPG     COMPLETE? 
      JMP *+3        YES, FINISH OFF
      ISZ XTABL      NO, BUMP TABLE POINTER 
      JMP INRLP     THEN DO AGAIN 
MRKER CCA           MAKE AN END OF TABLE MARKER,
      STA XTABL,I   PUT END MARKER IN TABLE 
      SPC 1 
      LDB XERRA     GET THE 'TOO BIG' VALUE 
      LDA ITABL     INITIALIZE A
      STA SVPD1      VALUE TABLE POINTER
      CPB FORTK     IS IT EXTRA EIGHT K?
      JMP YDOIT     YES, FINISH 
      ISZ SVPD1      NO, BUMP THE POINTER 
      CPB SIXTK     EXTRA SIXTEEN K?
      JMP YDOIT     YES 
      ISZ SVPD1      NO, BUMP AGAIN 
YDOIT LDB SVPD1,I    AND PUT CORRECT ENDING 
      STB UBOU        VALUE IN UPPER BOUNDARY.
      SKP 
      CLA           ZERO THE MEM
      LFA            BASE PAGE FENCE
      LDA OCT40     LOAD USER 
      LDB TBLDF     MAP REGISTERS 
      LDX OCT05      FOR BITS 13-19 (ME BUS)
      XMM            CHECK
      SPC 1 
      LDY NON05     INIT. XTHRU = 5 
      LDA PTRN2     GET 
      LDX PTRN1      PATTERNS 
      LDB OCT10     AND POINTER 
      STX B,I       PUT CONTROL PATTERN IN 10 
      SPC 1 
      SJP *+2       ON THE SYSTEM AREA
XDOIT XSA B,I       CROSS STORE 
      CPA OCT10,I   CLOBBER ADDRESS 10? 
      JSB XERRA     YES, GO AND CRASH!! 
      ADB OCT2K     NO, UPDATE POINTER TO NEXT PAGE 
      ISY           DONE??
      JMP XDOIT     NO, GO DO IT AGAIN
      JMP JACK-1     YES, GO DO MEM TESTING 
      SPC 1 
XERRA NOP 
      DJP *+2        OFF SYSTEM 
      JSB RGSVE     SAVE THE REGISTERS
      LDY XERRA     GET THE FAIL FLAG 
      JSB ERMS,I    AND REPORT THE
      DEF E325      PROBLEM OF ME BUS 
      SJP *+2       BACK ON THE SYSTEM
      JMP XERRA,I    AND RETURN 
      SPC 1 
TBLDF DEF *+1 
      OCT 40
      OCT 100 
      OCT 200 
      OCT 400 
      OCT 1000
      SPC 2 
      JSB RESET     SET TABLE POINTER TO FIRST ADDR 
JACK  DJP *+2       DISABLE THE SYSTEM
      LDA OCT10      STARTING REGISTER IS 10
      LDB XTABL,I   GET THE NEXT STARTING PAGE
      CPB NEG01     LAST ONE? 
      JMP ENDXX     YES, GO EXIT THE TEST 
      LDX OCT37     NO, GET THE COUNT 
      XMS           AND REDEFINE THE MAP REGISTERS
      SKP 
      ISZ XTABL     BUMP THE TABLE POINTER
      SJP *+2       TURN THE SYSTEM ON
      JMP ACT       AND DO THE MEMORY DIAGNOSTIC
      SPC 2 
RESET NOP 
      LDA TABLE     RESET THE 
      STA XTABL     STARTING PAGE 
      LDB XTABL,I   TABLE POINTER,
      JMP RESET,I   AND EXIT
XMASK OCT 70000 
      SPC 3 
ENDXX NOP 
      JMP TST23,I   EXIT TST23
      SPC 2 
E321  DEF ERROR 
H317  ASC 16,H317 MUST HAVE GREATER THAN 32K/ 
H327  ASC 22,H327  XXXXK OF CONTIGUOUS MEMORY INSTALLED/
      SPC 2 
DEC24 DEC 24
SIXTK OCT 60000 
MAXPG OCT 0 
NEG24 DEC -24 
XXTMP OCT 0 
XTABL OCT 0 
TABLE DEF *+1 
      BSS 7 
NXTBL DEF *+7 
      BSS 7 
ITABL DEF *+1 
      OCT 37777 
      OCT 57777 
      OCT 77777 
      SKP 
ACT   LDA MTIME 
      STA MCNT
      CCE 
LOOP  CME 
      LDA LBOU       THIS TEST DOES A MEMORY ADDRESS
FILL  LDB A          AND DOES A MEMORY COMPLEMENT 
      SEZ            TEST THUS ASSURING OF DETECTING
      CMB            ANY FAILURE REGARDLESS OF WHERE
      STB A,I        IT IS LOCATED
      CPA UBOU
      JMP CMP-1     THIS TEST DOES THE ADRS TEST WHEN 
      INA            E IS CLEAR AND DOES THE ADRS 
      JMP FILL       COMPLEMENT TEST WHEN E IS SET
      LDA LBOU
CMP   CAX 
      LDB A,I 
      SEZ           A = GOOD DATA 
      CMA           B = BAD DATA
      CPA B 
      RSS 
E320  OCT 107020
      SEZ 
      CMA 
      CPA UBOU
      JMP DOWN
      INA 
      JMP CMP 
DOWN  SEZ 
      ISZ MCNT
      JMP LOOP
      NOP 
      HED WALKING ONES TEST 
W1    LDA MTIME     WALKING ONE TEST
      STA MCNT      INITIALIZE REPEAT COUNTER 
      LDA IPAT1 
      STA PAT1
      LDA IPAT2 
      STA PAT2
      CLA,INA 
      STA BITPT     FOR ROTATING BIT PATTERN
      CAX 
BEGW  CLO 
      LDA LBOU
      STA ADDRS     INITIALIZE ADDRESS POINTER
WPAT1 LDB PAT1
      JSB WRITE 
      LDB PAT2
      JSB WRITE 
      JMP WPAT1 
      SPC 2 
* THE WRITE SUBROUTINE IS ENTERED WITH THE
* PATTERN TO BE STORED IN THE B-REG. IT IS
*STORED IN 32 LOCATIONS BEGINNING AT THE
* ADDRESS POINTER OR UNTIL THE UPPER ADDRESS
* BOUND IS REACHED.  THE RETURN ADDRESS IS
* THEN MODIFIED TO GET THE ALTERNATE PATTERN. 
      SPC 2 
WRITE NOP 
      STB ADDRS,I   STORE B THRU THE ADDRESS POINTER
      LDA ADDRS 
      CPA UBOU      HAS UPPER BOUND BEEN REACHED? 
      JMP BEGR      YES, GO READ. 
      INA           NO, 
      STA ADDRS     MODIFY ADDRESS POINTER
      AND XXMSK 
      SZA           AT 32 WORD BOUNDARY 
      JMP WRITE+1   NO CONTINUE WITH PRESENT PATTERN
      JMP WRITE,I 
      SPC 2 
* THE MEMORY WHICH HAS BEEN WRITTEN WITH
* 32 WORDS OF PATTERN ONE INTERLEAVED WITH
* 32 WORDS OF PATTERN TWO WILL NOW BE 
* TESTED.  IF THE DATA IN A MEMORY CELL 
* TESTS VALID, IT WILL BE COMPLEMENTED
* AND TESTED AGAIN.  IF IT IS STILL VALID IT
* WILL BE RECOMPLIMENTED AND THE
* NEXT MEMORY CELL WILL BE TESTED.  ANY 
* INVALID TEST WILL RESULT IN A  107021 WITH THE
* GOOD DATA IN THE A-REG AND THE BAD DATA 
* IN THE B-REG.  PUSH RUN AND A 107022
* WILL OCCUR WITH THE ADDRESS IN THE A-REG
* AND THE BAD DATA IN THE B-REG.
      SKP 
BEGR  STO 
      LDA LBOU
      STA ADDRS     INITIALIZE THE ADDRESS POINTER. 
RPAT1 LDA PAT1
                                                                                                                                                                        