      HED IAL TEST
* 
**  IAL TEST
* 
* 
* 1. GENERATE A LIST ADDRESS
* 2. CLEAR THE DESTINATION AREA 
* 3. EXECUTE MICROPROGRAM 
* 4. CHECK RESULTS
* 
* 
TST02 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS060 
      LDA M500
      STA IALCT 
* 
IAL00 JSB RNDGN      GET LENGTH 
      AND .+37B 
      SZA,RSS 
      JMP *-3 
      STA IALSZ      SAVE LENGTH
      STA IALCK 
* 
* GET SOURCE LIST ADDRESS 
* 
      JSB RNDGN 
      SZA 
      ELA,CLE,ERA 
      STA IALLS      SAVE IT
      STA IALRS 
* 
* CLEAR DESTINATION AREA
* 
      LDA .-32
      STA IALCC 
      CLA 
      STA IALI
* 
IAL10 CLA 
      LDB IALBP      => TO DESTINATION AREA 
      ADB IALI       INDEX
      STA B,I 
      ISZ IALI
      ISZ IALCC      DONE?
      JMP IAL10      NO 
* 
* 
* EXECUTE MICROPROGRAM
* 
      JSB RNDGN      SET (B) TO A RANDOM
      STA B            VALUE
      JSB RANEO      PUT RANDOM VALUES INTO E/O 
* 
      LDA IALLS      ADDR OF UNIQUE STORAGE AREA
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+IAL  =RAM IAL 
      DEF IALBF 
IALSZ DEC 0          LENGTH OF LIST SET ABOVE 
* 
* CHECK RESULTS 
* 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+7        B,E AND O SHOULD BE UNCHANGED
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS063 
      JMP TST02,I 
      LDA IALCK      # OF WORDS MOVED 
      CMA,INA 
      STA IALCC 
      CLA 
      STA IALI
      LDB IALRS 
* 
IAL20 LDA IALBP      => DESTINATION BUFFER
      ADA IALI       INDEX
      LDA A,I        GET WORD 
      CPA B          SHOULD BE EQUAL
      JMP *+4 
      JSB ERMS,I     BAD INDIRECT ADDRESS 
      DEF MS061        LIST GENERATED 
      JMP TST02,I 
      INB 
      ISZ IALI       BUMP ENDEX 
      ISZ IALCC      DONE?
      JMP IAL20      NO, CONTINUE COMPARE 
* 
      LDA IALBP      THE NEXT WORD
      ADA IALI        IN THE DESTINATION
      LDA A,I            LIST SHOULD BE ZERO
      SZA,RSS 
      JMP *+4 
      JSB ERMS,I     INDIRECT ADDRESS LONGER
      DEF MS062        THAN REQUESTED 
      JMP TST02,I 
* 
* 
* 
* 
* 
      ISZ IALCT      DONE?
      JMP IAL00      NO, CONTINUE 
* 
      JMP TST02,I 
* 
* 
* 
IALCT BSS 1 
IALCC BSS 1 
IALI  BSS 1 
IALCK BSS 1 
* 
IALBP DEF IALBF 
IALBF BSS 32       DESTINATION AREA 
* 
IALLS BSS 1 
IALRS BSS 1 
      HED INS, READF, SAVE AND RESTR TESTS
* 
**  INS, READF, SAVE AND RESTR TESTS
* 
* 
* 1. SET STACK POINTER AND CHECK STACK POINTER
* 2. SAVE REGISTERS AND CHECK STACK POINTER 
* 3. SAVE REGISTERS AND CHECK STACK POINTER 
* 4. RESTORE REGISTERS AND CHECK STACK POINTER
* 5. RESTORE REGISTERS AND CHECK STACK POINTER
* 
* 
TST03 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS110 
      LDA INSP
      IFN 
      OTA 5          SET STACK POINTER
      XIF 
      IFZ 
      JSB RANEO      PUT RANDOM 5ALUES INTO E/O 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+INS  INITIALIZE STACK POINTER 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      SZA,RSS        ALL REGISTERS RESTORED 
      JMP *+4        YES
      JSB ERMS,I
      DEF MS115 
      JMP TST03,I 
      XIF 
      CLA 
      ABS 105000B+READF  READ STACK POINTER 
      CPA INSP       SHOULD BE EQUAL
      JMP *+4 
      JSB ERMS,I     INS/READF ERROR
      DEF MS111 
      JMP TST03,I    ABORT TESTS
* 
* SAVE REGISTERS
* 
      CLA            CLEAR
      CLB              ALL
      CLO                REGISTERS
      CLE 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+SAVE  SAVE REGISTERS
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS117 
      JMP TST03,I 
* 
* 
* CHECK STACK POINTER (F) 
* 
      JSB RNDGN      SET (B) TO A RANDOM
      STA B            VALUE
      JSB RANEO      PUT RANDOM VALUES INTO E/O 
      CLA 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+READF  READ F 
      STA REDFP      SAVE STACK POINTER 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+7        B, E AND O SHOULD BE UNCHANGED 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS116 
      JMP TST03,I 
      LDA REDFP      RETRIEVE STACK POINTER 
      ADA .-3 
      CPA INSP
      JMP *+4 
      JSB ERMS,I     STACK POINTER BAD
      DEF MS113        AFTER A SAVE 
      JMP TST03,I 
* 
* SAVE REGISTERS
* 
      CLA,INA        SET (A) TO 1 
      CCB            SET (B) TO -1
      STO            SET (O)
      CLE            CLEAR (E)
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+SAVE  SAVE REGISTERS
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS117 
      JMP TST03,I 
* 
* CHECK STACK POINTER (F) 
* 
      CLA 
      ABS 105000B+READF  READ F 
      ADA .-6 
      CPA INSP
      JMP *+4 
      JSB ERMS,I     STACK POINTER BAD
      DEF MS113        AFTER A SAVE 
      JMP TST03,I 
* 
* 
* TEST RESTORE
* 
      CLA 
      CLB 
      CLO 
      CLE 
      ABS 105000B+RESTR  RESTORE REGISTERS
      CPA .+1        (A) SHOULD BE 1
      RSS 
      JMP RES10      SAVE OR RESTORE ERROR
      CPB .-1        (B) SHOULD BE -1 
      RSS 
      JMP RES10      SAVE OR RESTORE ERROR
      SOC            (O) SHOULD BE SET
      SEZ            (E) SHOULD HAVE BEEN CLEARED 
      JMP RES10      SAVE OR RESTORE ERROR
* 
* CHECK STACK POINTER (F) 
* 
      CLA 
      ABS 105000B+READF  READ F 
      ADA .-3 
      CPA INSP
      RSS 
      JMP RES20      STACK POINTER BAD AFTER RESTORE
* 
* RESTORE REGISTERS 
* 
      CCA 
      CLB,INB 
      STO 
      CCE 
      ABS 105000B+RESTR  RESTORE REGISTERS
      SZA            (A) SHOULD BE ZERO 
      JMP RES10      SAVE OR RESTORE ERROR
      SZB            (B) SHOULD BE ZERO 
      JMP RES10      SAVE OR RESTORE ERROR
      SEZ            (E) SHOULD HAVE BEEN CLEARED 
      JMP RES10      SAVE OR RESTORE ERROR
      SOC            (O) SHOULD HAVE BEEN CLEARED 
      JMP RES10      SAVE OR RESTORE ERROR
* 
* CHECK STACK POINTER (F) 
* 
      CLA 
      ABS 105000B+READF  READ F 
      CPA INSP
      RSS 
      JMP RES20      STACK POINTER BAD AFTER RESTORE
* 
      JMP TST03,I 
* 
* 
RES10 JSB ERMS,I     SAVE OR RESTORE
      DEF MS112        ERROR
      JMP TST03,I 
RES20 JSB ERMS,I     STACK POINTER BAD AFTER RESTORE
      DEF MS114 
      JMP TST03,I 
* 
INSP  DEF *+1 
      BSS 10          STACK 
REDFP BSS 1 
* 
      HED LAI AND SAI TESTS 
      ORG 4000B 
* 
* 
** LAI AND SAI TESTS
* 
* 1. CLEAR TWO BUFFERS (ONE FOR PROG AND ONE FOR MICROPROG) 
* 2. GET A NUMBER 
* 3. GET AN INDEX 
* 4. DO SAI WITH PROGRAM AND MICROPROGRAM 
* 5. COMPARE BUFFER AFTER STORES
* 
* 1. GET AN INDEX 
* 2. DO LAI WITH PROGRAM AND MICROPROGRAM 
* 3. COMPARE RESULTS
* 4. COMPARE BUFFERS AS FINAL CHECK 
* 
* 
TST04 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS120 
      LDA LSBF       => TO BUFFERS
      STA LSIP
      LDB N64 
      CLA 
LSIT1 STA LSIP,I     CLEAR THE 32 
      ISZ LSIP         WORD BUFFERS 
      ISZ B 
      JMP LSIT1 
* 
* 
* TEST SAI BY STORING INTO THE BUFFERS RANDOM 
* NUMBERS WITH RANDOM INDICES 
* 
      LDA M500
      STA LSICT 
* 
LSIT5 JSB RNDGN      GET A RANDOM NUMBER
      AND .+37B      CONVERT IT TO
      ADA .-16         AN INDEX 
      STA LAISI      SAVE IT
* 
* CONFIGURE THE MICROINSTRUCTION
* 
      ADA SAIUI      GET THE UNCONFIGURED INSTR 
      STA SAIMI      PUT INTO PROGRAM 
* 
* STORE VIA PROGRAM 
* 
      JSB RNDGN      GET A RANDOM NUM TO STORE
      STA SAICH 
      LDB LSBFP      => TO ITS BUFFER 
      JSB SAIS       STORE
* 
* STORE VIA MICROPROGRAM
* 
      JSB RANEO      PUT RANDOM VALUES INTO E/O 
      LDA SAICH 
      LDB LSBFM      => TO ITS BUFFER 
      JSB SAVRG      RECORD REGISTER VALUES 
SAIMI ABS 101000B+SAI  THIS INSTR CONFIGD ABOVE 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS125 
      JMP TST04,I 
* 
* 
      ISZ LSICT      DONE?
      JMP LSIT5      NO, DO MORE STORES 
* 
* 
* COMPARE BUFFERS AFTER STORES
* 
      LDA .-32       32 WORDS 
      STA LSICT        PER BUFFER 
      CLA 
      STA LSIP       INDEX
LST10 LDA LSBF       => TO PROGRAM BUFFER 
      ADA LSIP       INDEX INTO IT
      LDA A,I        GET AN ELEMENT 
      LDB LSBB       => TO MICROPROG BUFFER 
      ADB LSIP       INDEX
      CPA B,I        SHOULD BE EQUAL
      JMP *+4        OK 
      JSB ERMS,I     SAI ERROR
      DEF MS121 
      JMP TST04,I 
      ISZ LSIP       BUMP INDEX 
      ISZ LSICT      DONE WITH COMPARE? 
      JMP LST10      NO 
* 
* SAI TESTING NOW COMPLETE
* 
* 
* 
* START LAI TESTS 
* 
      LDA M500
      STA LSICT 
* 
LST20 JSB RNDGN      GET A RANDOM NUMBETR 
      AND .+37B      CONVERT IT TO
      ADA .-16         AN INDEX 
      STA LAISI      SAVE IT
* 
* CONFIGURE THE LAI MICROPROGRAM INSTRUCTION
* 
      ADA LAIUI      GET THE UNCONFIGD LAI INSTR
      STA LAIMI      PUT INTO PROGRAM 
* 
* 
* LOAD VIA PROGRAM
* 
      LDB LSBFP 
      JSB LAIS
      STA LSAIR      SAVE WORD RETRIEVED
* 
* LOAD VIA MICROPROGRAM 
* 
      CLA 
      LDB LSBFM      => TO BUFFER 
      JSB RANEO      PUT RANDOM VALUES INTO E/O 
      JSB SAVRG      RECORD REGISTER VALUES 
LAIMI ABS 105000B+LAI  THIS INSTR CONFIGD ABOVE 
* 
* COMPARE RESULTS OF LOADS
* 
      CPA LSAIR      COMPARE
      JMP *+4        OK 
      JSB ERMS,I     LAI ERROR
      DEF MS122 
      JMP TST04,I 
* 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+7        B, E AND O SHOULD BE UNCHANGED 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS124 
      JMP TST04,I 
      ISZ LSICT      DONE WITH LOADS? 
      JMP LST20      NO 
* 
* 
* COMPARE BUFFERS AS FINAL CHECK
* 
      LDA .-32       32 WORDS 
      STA LSICT        PER BUFFER 
      CLA 
      STA LSIP
LST30 LDA LSBF       PROGRAM BUFFER 
      ADA LSIP       INDEX
      LDA A,I        GET AN ELEMENT 
      LDB LSBB       MICROPROG BUF
      ADB LSIP       INDEX
      CPA B,I        SHOULD BE THE SAME 
      JMP *+4        OK 
      JSB ERMS,I     LAI ALTERS DATA
      DEF MS123        READ 
      JMP TST04,I 
      ISZ LSIP       BUMP INDEX 
      ISZ LSICT      DONE?
      JMP LST30      NO 
* 
      JMP TST04,I 
* 
* 
* 
LSICT BSS 1 
LSIP  BSS 1 
LSAIR BSS 1 
SAICH BSS 1 
LAIUI ABS 105000B+LAI  =RAM LAI 
      IFZ 
SAIUI ABS 101000B+SAI 
      XIF 
      IFN 
SAIUI ABS 105000B+100B
      XIF 
N64   DEC -64 
* 
LSBFP DEF LSBFA+16
LSBFM DEF LSBFB+16
LSBF  DEF LSBFA 
LSBB  DEF LSBFB 
LSBFA BSS 32         BUFFER USED BY PROGRAM FOR TESTS 
LSBFB BSS 32         BUFFER USED BY MICROPROG FOR TEST
                                                                                                    