      HED LOAD AND STORE (A) INDEXED
* 
* 
**  LOAD (A) INDEXED
* 
* CALLING SEQUENCE
* 
*         LAISI = N THE INDEX 
*         LDB BASAD      BASE ADDRESS OF 16 WORD AREA 
*         JSB LAIS       (A) IS LOADED WITH THE BASAD+N WORD
*         <RETURN>
* 
* (B) IS UNCHANGED
* 
* 
LAIS  NOP 
      STB A 
      ADA LAISI      => TO BASE ADDR + N
      LDA A,I         LOAD (A) WITH CONTENTS
      JMP LAIS,I      RETURN
* 
* 
LAISI BSS 1 
* 
* 
* 
* 
**  STORE (A) INDEXED 
* 
* CALLING SEQUENCE
* 
*         LAISI = N THE INDEX 
*         LDA VALUE     VALUE TO BE STORED
*         LDB BASAD     BASE ADDRESS OF 16 WORD AREA
*         JSB SAIS
*         <RETURN>
* 
* (B) IS UNCHANGED
* 
* 
SAIS  NOP 
      STB SAISB      SAVE B 
      ADB LAISI      ADD INDEX
      STA B,I 
      LDB SAISB      RESTORE B
      JMP SAIS,I     RETURN 
* 
* 
* 
SAISB BSS 1 
* 
      HED PFREX TEST
* 
**  PFREX TEST
* 
* 
* 
* 
TST05 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS130 
      LDA PFXEE      SET RETURN ADDRESS IN
      STA PFXEP        SIMULATED ENTRY POINT
      JSB RNDGN      SET (A) AND (B)
      STA B            WITH RANDOM
      JSB RNDGN          VALUES 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+PFREX  SHOULD RESULT IN A JMP 
      DEF PFXEP        TO PFX10 
      JSB ERMS,I     SHOULD NEVER COME
      DEF MS131        HERE 
      JMP TST05,I 
* 
PFX10 JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+16B      A, B AND E SHOULD BE UNCHANGED 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS133 
      JMP TST05,I 
      LDA PFXEP      GET RETURN ADDR
      SZA,RSS        SHOULD BE ZERO 
      JMP *+3 
      JSB ERMS,I
      DEF MS132 
      JMP TST05,I 
* 
* 
PFXEP NOP            SIMULATED ENTRY POINT
PFXEE DEF PFX10 
      HED PFREI TEST
* 
**  PFREI TEST
* 
* 
* 
TST06 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS140 
      LDA PFIEE      SET RETURN ADDRESS IN
      STA PFIEP        SIMULATED ENTRY POINT
      CLA            CLEAR
      STA PFIFL        FLAG 
      STO 
      JSB RNDGN      SET (A) AND (B)
      STA B            WITH RANDOM
      JSB RNDGN          VALUES 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+PFREI  SHOULD RESULT IN A "CLO" 
      CLO              SETTING OF PFIFL, CLEARING 
PFIFL BSS 1              OF RETURN ADDR AND XFER TO PFI10 
      DEF PFIEP            PFI10
      JSB ERMS,I     TRANSFER 
      DEF MS141        ERROR
PFI10 JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+16B      A, B AND E SHOULD BE UNCHANGED 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4 
      JSB ERMS,I
      DEF MS145 
      JMP TST06,I 
      LDA PFIFL 
      CPA .+1        FLAG SHOULD BE SET 
      JMP *+3 
      JSB ERMS,I     SOFTWARE FLAG
      DEF MS143        NOT SET
      SOS 
      JMP *+3 
      JSB ERMS,I     I/O NOT PERFORMED
      DEF MS142 
      LDA PFIEP      GET RETURN ADDRESS CELL
      SZA,RSS 
      JMP *+3 
      JSB ERMS,I     ENTRY POINT
      DEF MS144        NOT CLEARED
      JMP TST06,I 
* 
* 
* 
PFIEP NOP 
PFIEE DEF PFI10 
      HED PFRIO TEST
* 
**  PFRIO TEST
* 
* 
* 
* 
TST07 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS150 
      CLA 
      STA PFOFL      ZERO FLAG
      STO            SET (O)
      JSB RNDGN      SET (A) AND (B)
      STA B            WITH RANDOM
      JSB RNDGN          VALUES 
      JSB SAVRG      RECORD REGISTER VALUES 
      ABS 105000B+PFRIO  =RAM PFRIO 
      CLO 
PFOFL BSS 1 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+16B      A, B AND E SHOULD BE UNCHANGED 
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4        YES
      JSB ERMS,I
      DEF MS153 
      JMP TST07,I 
      CLA 
      LDA PFOFL 
      CPA .+1        SHOULD BE 1
      JMP *+3 
      JSB ERMS,I     SOFTWARE FLAG
      DEF MS151        NOT SET
      SOS            (O) SHOULD BE CLEARED
      JMP *+3 
      JSB ERMS,I     I/O NOT
      DEF MS152       PERFORMED 
      JMP TST07,I 
      HED BYTE READ/STORE TESTS 
      IFN 
* 
* 1. CLEAR TWO BUFFERS
* 2. GET A BYTE 
* 3. GET A BYTE ADDRESS 
* 4. STORE BYTE VIA PROGRAM 
* 5. STORE BYTE VIA MICROPROGRAM
* 6. COMPARE RESULTS
* 
* 1. FILL TWO BUFFER
* 2. GET A BYTE ADDRESS 
* 3. LOAD BYTE VIA PROGRAM
* 4. COMPARE RESULTS
* 5. COMPARE BUFFER AS FINAL TEST 
* 
* 
* 
      ORG 6000B 
TST08 NOP 
      JSB MSGC,I    ANNOUNCE TEST 
      DEF MS160 
* 
      LDA .-32      32 WORD BUFFERS 
      STA SBYCT 
      CLA           ZERO
      STA SBYI        INDEX 
SBY10 LDB SBYBP     CLEAR 
      ADB SBYI        FIRST 
      STA B,I           BUFFER
      LDB SBYBM     CLEAR 
      ADB SBYI        SECOND
      STA B,I 
      ISZ SBYI
      ISZ SBYCT 
      JMP SBY10 
* 
* 
* 
      LDA M500
      STA SBYCT 
SBY20 JSB RNDGN 
      AND .+37B 
      STA SBYI
* 
* STORE VIA PROGRAM 
* 
      LDB SBYBP     GET BYTE ADDRESS
      CLE,ELB         OF THE BUFFER 
      ADB A         INDEX 
      JSB RNDGN 
      JSB SBYTE 
* 
* 
* STORE VIA MICROPROGRAM
* 
      LDB SBYBM     GET BYTE ADDRESS
      CLE,ELB         OF THE BUFFER 
      ADB SBYI      INDEX 
      STB SBYAM     SAVE BYTE ADDRESS 
      JSB RANEO     PUT RANDOM VALUES INTO E/O
      JSB SAVRG     RECORD REGISTER VALUES
      ABS 105000B+STBYT 
* 
      JSB REGCK     CHECK IF REGS HAVE CHANGED
      LDA REGST 
      AND .+13B     A,E AND O SHOULD BE UNCHANGED 
      SZA,RSS       ALL REGISTERS RESTORED? 
      JMP *+4       YES 
      JSB ERMS,I
      DEF MS212 
      JMP TST08,I 
      CMB,INB       HAS BYTE
      INB 
      ADB SBYAM       ADDRESS BEEN
      SZB,RSS           BUMPED? 
      JMP *+4 
      JSB ERMS,I
      DEF MS211 
      JMP TST08,I 
* 
* COMPARE THE RESULT OF THE TWO STORES
* 
      LDA .-32
      STA SBYC1 
      CLA 
      STA SBYI
SBY30 LDA SBYBP     => BUFFER USED BY PROGRAM 
      ADA SBYI      INDEX 
      LDA A,I 
      LDB SBYBM     => BUFFER USED BY MICROPROGRAM
      ADB SBYI      INDEX 
      CPA B,I 
      JMP *+4       YES 
      JSB ERMS,I
      DEF MS213 
      JMP TST08,I 
      ISZ SBYI      BUMP INDEX
      ISZ SBYC1     DONE? 
      JMP SBY30     NO
* 
      ISZ SBYCT     DONE WITH SAVE BYTE TEST? 
      JMP SBY20     NO
* 
* 
* 
* START LOAD BYTE TEST
* 
      LDA M500
      STA SBYCT 
* 
SBY40 JSB RNDGN 
      AND .+37B 
      STA SBYI
* 
* LOAD VIA PROGRAM
* 
      CLA 
      LDB SBYBP     GET BYTE ADDRESS
      CLE,ELB         OF THE BUFFER 
      ADB SBYI      INDEX 
      JSB GBYTE 
      STA GBYRT 
* 
* LOAD VIA MICROPROGRAM 
* 
      CLA 
      LDB SBYBM     GET BYTE ADDRESS
      CLE,ELB         OF THE BUFFER 
      ADB SBYI      INDEX 
      STB SBYAM     SAVE B
      JSB RANEO     PUT RANDOM VALUES INTO E/O
      JSB SAVRG     RECORD REGISTER VALUES
      ABS 105000B+LBYTE 
      CPA GBYRT     SAME AS ABOVE?
      JMP *+4       NO, ERROR 
      JSB ERMS,I
      DEF MS223 
      JMP TST08,I 
      JSB REGCK     CHECK IF REGS HAVE CHANGED
      LDA REGST 
      AND .+3       E AND O SHOULD BE UNCHANGED 
      SZA,RSS       ALL REGS RESTORED?
      JMP *+4       YES 
      JSB ERMS,I
      DEF MS222 
      JMP TST08,I 
      CMB,INB 
      INB 
      ADB SBYAM 
      SZB,RSS       HAS B BEEN BUMPED?
      JMP *+4       YES 
      JSB ERMS,I    NO,ERROR
      DEF MS221 
      JMP TST08,I 
* 
      ISZ SBYCT 
      JMP SBY40 
* 
* COMPARE BUFFERS AS A FINAL CHECK
* 
      LDA .-32
      STA SBYCT 
      CLA 
      STA SBYI
SBY50 LDA SBYBP     => BUFFER USED BY PROGRAM 
      ADA SBYI      INDEX 
      LDA A,I 
      LDB SBYBM     => BUFFER USED BY MICROPROG 
      ADB SBYI      INDEX 
      CPA B,I       SAME? 
      JMP *+4       YES 
      JSB ERMS,I    NO, ERROR 
      DEF MS224 
      JMP TST08,I 
      ISZ SBYI      BUMP INDEX
      ISZ SBYCT     DONE
      JMP SBY50     NO
* 
      JMP TRS00     RUN TRSLT TEST
* 
SBYCT BSS 1 
SBYC1 BSS 1 
SBYI  BSS 1 
SBYAM BSS 1 
GBYRT BSS 1 
* 
SBYBP DEF *+1 
      BSS 32
SBYBM DEF *+1 
      BSS 32
      XIF 
      HED TRSLT TEST
* 
** TRSLT TEST 
* 
* 
* 1. BUILD TRANSLATION TABLES (TWO COPIES)
* 2. BUILD TWO STRINGS (TWO COPIES) 
* 3. TRANSLATE WITH PROGRAM AND MICROPROGRAM
* 4. COMPARE RESULTS
* 5. COMPARE TABLES AS A FINAL CHECK
* 
* 
* 
      IFZ 
      ORG 6000B 
TST08 NOP 
      JSB MSGC,I     ANNOUNCE TEST
      DEF MS160 
      XIF 
* 
* 
TRS00 LDA M128
      STA TRSCT 
      CLA 
      STA TRSI
TRS10 JSB RNDGN 
      LDB TRSTP      => PROGRAM TRANSLATION TABLE 
      ADB TRSI       INDEX
      STA B,I        STORE
      LDB TRSTM      => MICROPROGRAM TRANSLATION TABLE
      ADB TRSI       INDEX
      STA B,I        STORE
* 
      ISZ TRSI       BUMP INDEX 
      ISZ TRSCT      DONE?
      JMP TRS10      CONTINUE BUILDING TABLES 
* 
      LDA .-32      CLEAR 
      STA TRSCT       BUFFERS 
      CLA               FOR STRINGS 
      STA TRSI            TO BE 
TRS15 LDB TRSSP             TRANSLATED
      ADB TRSI
      STA B,I 
      LDB TRSSM 
      ADB TRSI
      STA B,I 
      ISZ TRSI
      ISZ TRSCT 
      JMP TRS15 
* 
* 
* 
      LDA M500
      STA TRSCT 
* 
* 
* GET LENGTH
* 
TRS20 JSB RNDGN     GET RANDOM NUMBER 
      AND .+37B     GET LENGTH FROM IT
      SZA,RSS       ZERO? 
      JMP *-3       YES, GET ANOTHER
      STA TRSPN     PUT LENGTH INTO PROGRAM 
      STA TRSMN       AND MICRO CALL
* 
* BUILD STRING
* 
      ARS           CONVERT 
      INA             LENGTH
      CMA,INA           INTO -WORDS 
      STA TRSC1 
      CLA           ZERO
      STA TRSI        INDEX 
TRS30 JSB RNDGN     GET A RANDOM NUMBER 
      LDB TRSSP     => PROG STRING
      ADB TRSI      INDEX 
      STA B,I       STORE 
      LDB TRSSM     => TO MICRO PROG STRING 
      ADB TRSI      INDEX 
      STA B,I       STORE 
      ISZ TRSI
      ISZ TRSC1     DONE? 
      JMP TRS30     NO, CONTINUE BUILDING STRINGS 
* 
* 
* TRANSLATE VIA PROGRAM 
* 
      LDB TRSSP      => TO STRING TO TRANSLATE
      CLE,ELB        CONVERT TO BYTE POINTER
      LDA TRSCT 
      SZA 
      INB           BUMP BYTE ADDR
      LDA TRSTP     => TRANSLATION TABLE
      JSB TRSLS     DO IT 
TRSPN DEC 0         LENGTH (SET ABOVE)
* 
* 
* TRANSLATE VIA MICROPROGRAM
* 
      CLA            INITIALIZE INTERRUPT 
      STA INTFG        FLAG 
      LDA TBGSC 
      SZA,RSS       TBG?
      JMP TRSNI     NONE
      LDA TRSMN      INTERRUPT ONLY 
      ADA .-8         IF BUF LENGTH 
      SSA               IS GREATER THAN 8 
      JMP TRSNI 
      LDA TRSII     GET JSB TO TBGIC
      STA TRSIN     STORE IN PROGRAM
      JMP *+3 
TRSNI CLA           DON'T INTERRUPT THIS TIME 
      STA TRSIN 
* 
      LDB TRSSM     => TO STRING TO TRANSLATE 
      CLE,ELB        CONVERT TO BYTE POINTER
      LDA TRSCT 
      SZA 
      INB           BUMP BYTE ADDR
      LDA TRSTM      => TRANSLATION TABLE 
      JSB RANEO      PUT RANDOM VALUES INTO E/O 
      JSB SAVRG      RECORD REGISTER VALUES 
TRSIN NOP            MAY CONTAIN  JSB TBGIC 
TRSAD ABS 105000B+TRSLT  =RAM TRSLT 
TRSMN DEC 0          LENGTH (SET ABOVE) 
* 
* 
* COMPARE RESULTS 
* 
      CLF 0          DISABLE INTERRUPT SYSTEM 
      JSB REGCK      CHECK IF REGS HAVE CHANGED 
      LDA REGST 
      AND .+3        E AND O SHOULD BE UNCHANGED
      SZA,RSS        ALL REGISTERS RESTORED?
      JMP *+4 
      JSB ERMS,I
      DEF MS163 
      JMP TST08,I 
* 
* CHECK IF MICROPROGRAM WAS INTERRUPTED 
* 
      LDA TRSIN      WERE WE TESTING
      SZA,RSS          INTERRUPTIBILITY?
      JMP TRS33      NO 
      LDA INTFG 
      CPA .+1        INTERRUPTED? 
      JMP *+4        YES
      JSB ERMS,I     NO, ERROR
      DEF MS165 
      JMP TST08,I 
* 
TRS33 LDA .-32
      STA TRSC1 
      CLA 
      STA TRSI
TRS35 LDA TRSSP      GET A WORD FROM
      ADA TRSI        STRING TRANSLATED 
      LDA A,I           BY PROGRAM
      LDB TRSSM     COMPARE WITH ONE
      ADB TRSI        TRANSLATED BY MICRO PROG
      CPA B,I       SHOULD BE EQUAL 
      JMP *+4 
      JSB ERMS,I     TRANSLATION
      DEF MS161        ERROR
      JMP TST08,I 
* 
      ISZ TRSI
      ISZ TRSC1      DONE?
      JMP TRS35      NO 
* 
      ISZ TRSCT      DONE WITH TESTS? 
      JMP TRS20      NO 
* 
* 
* CHECK IF THE TRANSLATION TABLES HAVE BEEN ALTERED 
* 
      LDA M128
      STA TRSC1 
      CLA 
      STA TRSI
TRS40 LDA TRSTP     GET A WORD FROM THE TRANSLATION 
      ADA TRSI        TABLE USED BY THE 
      LDA A,I           PROGRAM 
      LDB TRSTM     COMPARE IT WITH ONE 
      ADB TRSI        IN TRANSLATION TABLE USED 
      CPA B,I           BY MICROPROGRAM 
      JMP *+4 
      JSB ERMS,I     TRANSLATION TABLE
      DEF MS162        ALTERED
      JMP TST08,I 
      ISZ TRSI       BUMP INDEX 
      ISZ TRSC1      DONE?
      JMP TRS40      NO 
* 
      IFZ 
      JMP TST08,I 
      XIF 
      IFN 
      JMP BMV00      RUN BYTE MOVE TEST 
      XIF 
* 
* 
* 
* 
* 
TRSCT BSS 1 
TRSC1 BSS 1 
TRSI  BSS 1 
TRSII JSB TBGIC 
* 
* 
TRSTP DEF *+1       TRANSLATION TABLE TO BE USED BY PROGRAM 
      BSS 128 
TRSSP DEF *+1       STRING TO BE TRANSLATED BY PROGRAM
      BSS 32
* 
TRSTM DEF *+1       TRANSLATION TABLE FOR MICROPROGRAM
      BSS 128 
TRSSM DEF *+1       STRING TO TRANSLATE BY MICROPROGRAM 
      BSS 32
* 
M128  DEC -128
      HED TRANSLATE 
* 
* 
* 
* 
**  TRANSLATE 
* 
* 
* CALLING SEQUENCE
* 
*         LDA TABLP     ADDRESS OF TABLE
*         LDB BYADR     BYTE ADDRESS OF STRING
* 
*         JSB TRSLS 
*         DEC N         # OF BYTES TO TRANSLATE 
*         <RETURN>
**
* 
* 
* 
TRSLS NOP 
      STA TABAD     SAVE TABLE ADDR 
      LDA TRSLS,I   GET # OF BYTES TO PORCESS 
      SZA,RSS       ANY?
* 
      JMP TEXIT 
      CMA,INA 
      STA TRNOB     -# OF BYTES TO PROCESS
      STB TBYAD     SAVE BYTE ADDR OF STRING
* 
TRSL1 JSB GBYTE      GET A BYTE FROM THE STRING 
      ADA TABAD     CALCULATE THE BYTE ADDR IN
      ADA TABAD       THE TABLE OF THE CHAR TO SWAP 
      STA B 
      JSB GBYTE     GET BYTE FROM TABLE 
      LDB TBYAD 
      JSB SBYTE     STORE BYTE IN STRING
* 
      INB 
      STB TBYAD 
      ISZ TRNOB     DONE? 
      JMP TRSL1     NO
* 
TEXIT ISZ TRSLS 
      JMP TRSLS,I    RETURN 
* 
* 
TABAD BSS 1 
TRNOB BSS 1 
TBYAD BSS 1 
                                                                                                                                                                                                                                                            