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 * * * (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 * * * (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 TABLE (TWO COPIES) * 2. BUILD STRING (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 SLA 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 .-16 IF BUF LENGTH IS SSA GREATER THAN 15 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 SLA 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 * ** * * * 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