;ACCUMULATOR ASSIGNMENTS ;CONTROL WORDS AROV=400000 ;ARITHMETIC OVERFLOW CRY0=200000 ;CARRY 0 CRY1=100000 ;CARRY 1 FOV=40000 ;FLOATING OVERFLOW BIS=20000 ;BYTE INTERRUPT USERF=10000 ;USER MODE FLAG EXIOT=4000 ;USER PRIV I/O FLAG FXU=100 ;FLOATING UNDERFLOW DCK=40 ;DIVIDE CHECK ;DAKAL MCNVER==0 DECVER==2 XLIST DEFINE NAME (MCNVER,DECVER)< TITLE DAKAL PDP-10 KI10 BASIC INSTRUCTION DIAGNOSTIC (12) MCNVER,DECVER > LIST LALL NAME \MCNVER,\DECVER ;(MULTIPY, INTERGER MULTIPLY, DIVIDE, INTERGER DIVIDE) ;COPYRIGHT 1975,1977 ;DIGITAL EQUIPMENT CORPORATION ;MARLBORO, MASS. 01752 ;JOHN R. KIRCHOFF LOC 137 MCNVER,,DECVER ; .DIRECTIVE .OKOVL NOSYM SUBTTL DIAGNOSTIC PARAMETERS ;OPERATOR DEFINITIONS OPDEF ER1 [1B8] OPDEF ER2 [2B8] OPDEF ER3 [3B8] OPDEF ER4 [4B8] OPDEF ER5 [5B8] OPDEF ER6 [6B8] OPDEF ER7 [7B8] OPDEF ER10 [10B8] OPDEF ER11 [11B8] OPDEF ER12 [12B8] OPDEF ER13 [13B8] LUUO1=ERRMES LUUO2=ERRMES LUUO3=ERRMES LUUO4=ERRMES LUUO5=ERRMES LUUO6=ERRMES LUUO7=ERRMES LUUO10=ERRMES LUUO11=ERRMES LUUO12=ERRMES LUUO13=ERRMES ;SUBROUTINE ASSEMBLY DEFINITIONS DEBUG=40 EXCASB=1 USRASB=1 KA10=1 KLOLD==1 PGMEND=1 ERDIAG=1 ;SPECIAL FEATURE DEFINITIONS SADR1=BEGIN SADR2=BEGIN SADR3=BEGIN SADR4=BEGIN SADR5=JRST BEGIN SADR6=JRST BEGIN SADR7=JRST BEGIN SADR8=JRST BEGIN SADR9=JRST BEGIN SADR10=JRST BEGIN SADR11=JRST BEGIN ;SPECIAL FEATURE PARAMETERS PAREA0=0 PAREA1=0 PAREA2=0 PAREA3=SIXBIT/DAKAL/ PAREA4=SIXBIT/TMP/ PAREA5=0 PAREA6=0 ITERAT==1000 ;MACROS DEFINE SAVEAC (A,B)< MOVEI AC+2,. ;SAVE TEST PC MOVEM AC+2,TESTPC MOVEI AC+2,&17 ;INFORM ERROR ROUTINE WHICH MOVEM AC+2,ERRLOP# ;AC IS USED FOR ITERATION> DEFINE MOP1 (T,A1,A2,EE,R1,R2)< ;THIS MACRO INITIALIZES AC,AC+1 AND E WITH [A1],[A2] AND ;[EE] RESPECTIVELY, PERFORMS 'MUL AC,E' AND COMPARES AC,AC+1 ;AND E AGAINST [R1], [R2] AND [EE] RESPECTIVELY. ;IF ANY OF THE ABOVE COMPARISONS FAIL, AN ERROR IS REPORTED F'T'0: AA1=A1 ;INITIAL C(AC) MOVE AC,[A1] ;PRELOAD AC (MULTIPLIER) AA2=A2 ;INITIAL C(AC+1) MOVE AC+1,[A2] ;PRELOAD AC+1 AEE=EE ;INITIAL C(E) MOVE E,[EE] ;PRELOAD E (MULTIPLICAND) MUL AC,E ;*MULTIPLY C(E) BY C(AC) AR1=R1 ;EXPECTED RESULT IN AC CAME AC,[R1] ;IS HIGH PRODUCT CORRECT? ER3 AC,T'1 ;HIGH PRODUCT FAILED AR2=R2 ;EXPECTED RESULT IN AC+1 CAME AC+1,[R2] ;IS LOW PRODUCT CORRECT? ER4 AC+1,T'2 ;LOW PRODUCT FAILED AEE=EE ;INITIAL C(E) CAME E,[EE] ;WAS C(E) CLOBBERED? ER5 E,T'3 ;C(E) WAS CLOBBERED JUMPL AC+2,F'T'0 ;LOOP ON ERROR SWITCH> SUBTTL DIAGNOSTIC SECTION EXIT: ;DROPDV ;CLOSE LOGICAL OUTPUT FILE ;EXIT PGMNAM: ASCIZ/ PDP-10 KI10 BASIC INSTRUCTION DIAGNOSTIC (12) [DAKAL] / TESTPC: 0 ;SUBTEST PC LOC 30621 START: ;PGMINT ;MOVE [ASCIZ/AL/] ;MOVEM TLET ;INITIALIZE TEST LETTER STARTA: JRST F00 ;GO PERFORM DIAGNOSTIC SUBTTL MAIN TESTING ADR=3000 F00: AC=14 E=&17 N1=525252525252 N2=252525252525 SAVEAC (1,1) WW=^D36 XX=0 REPEAT ^D36,< ADR=ADR+1 WW=WW-1 XX=XX+XX IFE XX, ;MULTIPLY A FLOATING 1 BY 1010...101010 V1=N1 V2=N1*XX IFL XX, IFG XX,>!>>> MOP1 (\ADR,V1,0,XX,V3,V2)> AC=14 E=&17 SAVEAC (1,1) WW=^D36 XX=0 REPEAT ^D35,< ;LAST CASE DIFFERENT ADR=ADR+1 WW=WW-1 XX=XX+XX IFE XX, ;MULTIPLY 0101...0101 BY A FLOATING 1 V1=N2 V2=N2*XX IFG XX,>> IFL XX, MOP1 (\ADR,XX,0,V1,V3,V2)> ADR=ADR+1 ;MULTIPLY A 1010...1010 BY A 400000,,0 XX=400000000000 V1=252525252525 MOP1 (\ADR,XX,0,V1,V1,0) AC=13 E=&17 SAVEAC (1,1) WW=^D36 XX=0 REPEAT ^D36,< ADR=ADR+1 WW=WW-1 XX=XX+XX IFE XX, ;MULTIPLY A FLOATING 1 BY 0101...0101 V1=N2 V2=N2*XX IFG XX,>> IFL XX, MOP1 (\ADR,V1,0,XX,V3,V2)> AC=12 E=&17 SAVEAC (1,1) XX=0 REPEAT ^D36,< ADR=ADR+1 XX=XX+XX IFE XX, ;MULTIPLY A FLOATING 1 BY ITSELF FOR A SQUARE PRODUCT V1=XX*XX IFG XX,*>_1>> IFL XX, MOP1 (\ADR,XX,-1,XX,V2,V1)> AC=11 E=&17 SAVEAC (1,1) XX=0 REPEAT ^D36,< ADR=ADR+1 XX=XX+XX+1 IFE , ;MULTIPLY A FLOATING 0 BY ITSELF FOR A SQUARE PRODUCT V1=XX*XX IFE , IFN , IFL XX,>_-22>*<<->_-22>>_1>+V2A>> IFG XX, MOP1 (\ADR,XX,-1,XX,V2,V1)> AC=10 E=&17 SAVEAC (1,1) XX=0 YY=0 REPEAT ^D36,< ADR=ADR+1 XX=XX+XX YY=YY+YY+1 IFE XX, IFE , ;MULTIPLY A FLOATING 1 BY A FLOATING 0 V1=XX*YY IFE , IFN ,+>*>+-1>> IFG XX, IFL XX, MOP1 (\ADR,YY,0,XX,V2,V1)> AC=7 E=&17 SAVEAC (1,1) XX=0 YY=0 REPEAT ^D35,< ;LAST CASE DIFFERENT ADR=ADR+1 XX=XX+XX YY=YY+YY+1 IFE XX, IFE , ;MULTIPLY A FLOATING 0 BY A FLOATING 1 V1=XX*YY IFE , IFN ,+>*>+-1>> IFG XX, IFL XX, MOP1 (\ADR,XX,0,YY,V2,V1)> ADR=ADR+1 ;MULTIPLY A 400000,,0 BY A 377777,,-1 YY=377777777777 XX=400000000000 MOP1 (\ADR,XX,0,YY,YY,0) ;MULTIPLIER = 2,4 ;MULTIPLICAND = 377777 777777 AC=14 SAVEAC (1,1) SN=300 XX=-1 YY=2 ZZ=1 F300: REPEAT ^D2,< SN=SN+1 XX=XX+2 YY=YY-2 IFE YY, ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP MULTIPLIER HRLOI AC-1,377777 ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 377777777777 CAME AC,[XX] ;TEST HIGH PROD ER3 AC,SN CAME AC+1,[YY] ;TEST LOW PROD ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST MQ FINAL SHIFT ;MULTIPLIER = 200000 000000 ;MULTIPLICAND = 5,7 AC=7 SAVEAC (1,1) SN=500 XX=1 ZZ=3 ;TEST MQSHRT FAILING F500: REPEAT ^D2,< SN=SN+1 XX=XX+1 ZZ=ZZ+2 MOVSI AC-2,200000 ;SETUP FOR COMPARISON MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MUL AC,AC-1 ;MUL 200000 000000 X ZZ CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN MOVEI AC-2,XX ;SETUP FOR COMPARISON CAME AC,AC-2 ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 10,20 ;MULTIPLICAND = 377777 777777 AC=11 SAVEAC (1,1) SN=700 XX=-1 ZZ=4 ;TEST ARSHRT FAILING F700: REPEAT ^D2,< SN=SN+1 XX=XX+10 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP MULTIPLIER HRLOI AC-1,377777 ;SETUP MULTIPLICAND MUL AC,AC-1 ;MUL. ZZ X 377777 777777 CAME AC+1,[ZZ*377777777777] ;TEST LOW PROD ER4 AC+1,SN ;ARSHRT ASSERTED CAME AC,[XX] ;TEST HIGH PROD = PLIER ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 0 ;MULTIPLICAND = -15,-13 AC=10 SAVEAC (1,1) SN=1000 ZZ=-17 ;TEST MQSHRT FAILING F1000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+2 SETZ AC, ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY 0 X -ZZ SKIPE AC+1 ;TEST LOW PROD ER4 AC+1,SN SKIPE AC ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > PAGE ;MULTIPLIER = -2,-4 ;MULTIPLICAND = 0 AC=7 SAVEAC (1,1) SN=1100 XX=0 ZZ=-1 F1100: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ IFE XX, HRROI AC,ZZ ;SETUP MULTIPLIER SETZ AC-1, ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 0 SKIPE AC+1 ;TEST LOW PROD ER4 AC+1,SN SKIPE AC ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 2,4 ;MULTIPLICAND = 5 AC=14 SAVEAC (1,1) SN=1400 XX=5 ZZ=1 F1400: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ HRRZI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP MULTIPLIER MOVEI AC-1,5 ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 5 CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN SETO AC-2, ;SET FOR COMPARISON SKIPE AC ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 200000 000000,100000 000000 ;MULTIPLICAND = 25 AC=11 SAVEAC (1,1) SN=2000 XX=377777 YY=24 ZZ=0 F2000: REPEAT ^D2,< SN=SN+1 XX=XX/2 YY=YY/2 ZZ=ZZ/2 IFE ZZ, MOVSI AC-2,ZZ ;SETUP FOR COMPARISON MOVSI AC,ZZ ;SETUP MULTIPLIER MOVEI AC-1,25 ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 25 CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN MOVEI AC-2,YY ;SET FOR COMPARISON CAME AC,AC-2 ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;INPUT ONE'S- ;MULTIPLIER = 400000 000000 ;MULTIPLICAND = -20,-40 AC=6 SAVEAC (1,1) SN=2200 ZZ=-10 XX=10 F2200: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ XX=XX+XX MOVSI AC,400000 ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND MUL AC,AC-1 ;MUL.400000 000000 X ZZ CAME AC,[ZZ] ;TEST HI PRODUCT ER3 AC,SN CAME &17,[1B0] ;TEST LO PROD ER4 AC+1,SN JUMPL AC+2,.-^D7 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 10,20 ;MULTIPLICAND = 4 AC=5 SAVEAC (1,1) SN=2400 XX=20 ZZ=4 F2400: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP MULTIPLIER MOVEI AC-1,4 ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 4 CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN SKIPE AC ;TEST HIGH PRODUCT ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 1,2 ;MULTIPLICAND = 200000 000000,100000 000000 AC=14 SAVEAC (1,1) SN=3300 XX=0 ZZ=0 F3300: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ/2 IFE XX, IFE ZZ, MOVSI AC-2,200000 ;SETUP FOR COMPARISON SETO AC+1, ;INITIALIZE AC+1 MOVEI AC,XX ;SETUP MULTIPLIER MOVSI AC-1,ZZ ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY TWO VARIABLES SKIPE AC ;TEST HIGH PROD ER3 AC,SN CAME AC+1,AC-2 ;TEST LOW PRODUCT ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;MUL ;MULTIPLIER = 400000 000000 ;MULTIPLICAND = -1,-2 AC=12 SAVEAC SN=4000 XX=0 ZZ=0 F4000: REPEAT ^D2,< SN=SN+1 XX=XX+1 ZZ=ZZ-1 MOVSI AC,400000 ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND MUL AC,AC-1 ;MULTIPLY TWO NEGATIVES CAME AC,[ZZ] ;TEST HI PROD ER3 AC,SN CAME &17,[1B0] ;TEST LO PROD ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST MUL-IMMEDIATE MODE ;TEST THE ABILITY TO MULTIPLY WITH ;EFFECTIVE ADDRESS AS MULTIPLICAND ;MULTIPLIER = 1 ;MULTIPLICAND = E SN=4200 AC=11 ;TEST IMMEDIATE MODE F4200: REPEAT ^D2,< SN=SN+1 AC=AC-1 SAVEAC (1,1) ;SAVE AC FOR ITERATION MOVEI AC-2,AC-1 ;SETUP FOR COMPARISON MOVEI AC,1 ;SETUP MULTIPLIER HRROI AC-1,-1 ;SETUP AC-1 MULI AC,AC-1 ;MULTIPLY 1 X E CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN ;MULTIPLIED BY C(E) VICE E SKIPE AC ;TEST HIGH PROD ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST MUL-MEMORY MODE ;TEST SC(E), PRODUCT HIGH ORDER PART ;TEST ABILITY TO ASSERT SAC INH ;TEST ABILITY TO INHIBIT SAC2-PRODUCT LOW ;ORDER PART IS LOST ;MULTIPLIER = 200000 000000 ;MULTIPLICAND = 2,4 AC=7 SAVEAC SN=4300 ZZ=1 ;TEST SCE F4300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVSI AC-2,200000 ;SETUP FOR COMPARISON SETZM AC+1 ;SETUP AC+1 MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MULM AC,AC-1 ;MUL 200000 000000 X ZZ CAME AC,AC-2 ;TEST AC ER3 AC,SN ;C(AC) WAS CLOBBERED SKIPE AC+1 ;TEST AC+1 ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED CAIE AC-1,ZZ/2 ;TEST PRODUCT ER5 AC-1,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > PAGE SN=4400 ZZ=1 ;TEST SAC INH F4400: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MULM AC,AC-1 ;MUL 200000 000000 X ZZ TLNN AC,200000 ;TEST FOR ORIGINAL CONTENTS ER3 AC,SN JUMPL AC+2,.-5 ;LOOP ON ERROR SWITCH > PAGE SN=4500 ZZ=1 ;TEST SAC2 ASSERTED F4500: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ SETZ AC+1, ;CLEAR AC+1 MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MULM AC,AC-1 ;MUL 200000 000000 X ZZ SKIPE AC+1 ;TEST FOR ORIGINAL CONTENTS ER4 AC+1,SN JUMPL AC+2,.-6 ;LOOP ON ERROR SWITCH > ;TEST MUL-BOTH MODE ;TEST ABILITY TO STORE PRODUCT HIGH ORDER ;PART IN AC,E ;TEST ABILITY TO STORE PRODUCT LOW ORDER ;PART IN AC+1 ;MULTIPLIER = 200000 000000 ;MULTIPLICAND = 5,7 AC=6 SAVEAC (1,1) SN=4600 XX=1 ZZ=3 F4600: REPEAT ^D2,< SN=SN+1 XX=XX+1 ZZ=ZZ+2 MOVSI AC-2,200000 ;SETUP FOR COMPARISON SETZM AC+1 ;SETUP FOR COMPARISON MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MULB AC,AC-1 ;MUL 200000 000000 X ZZ CAME AC,AC-1 ;TEST C(AC) = C (E) ER3 AC,SN ;SCE FAILED CAME AC+1,AC-2 ;TEST LOW PROD ER4 AC+1,SN CAIE AC-1,XX ;TEST LOW PROD ER5 AC-1,SN JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST AROV SET-MUL ;MULTIPLIER = 400000 000000 ;MULTIPLICAND = 400000 000000 ;PRODUCT = 400000 000000 400000 000000 ;AROV IS SET F4710: JRSTF @[.+1] ;CLEAR ALL FLAGS MOVSI AC,400000 ;SETUP MULTIPLIER MOVSI AC-2,400000 ;SETUP MULTIPLICAND MUL AC,AC-2 JSP AC-3,.+1 ;SAVE FLAGS CAME AC,[1B0] ;TEST HIGH PRODUCT ER3 AC,4711 CAME AC+1,[1B0] ;TEST LOW PRODUCT ER4 AC+1,4711 JOV .+2 ;TEST AROV ER13 AC-3,4711 ;FAIL IF AROV NOT SET JUMPL AC+2,F4710 ;LOOP ON ERROR SWITCH ;TEST AROV SET-MULB ;MULTIPLIER = 400000 000000 ;MULTIPLICAND = 400000 000000 ;PRODUCT = 400000 000000 400000 000000 ;AROV IS SET F4720: JRSTF @[.+1] ;CLEAR ALL FLAGS MOVSI AC,400000 ;SETUP MULTIPLIER MOVSI AC-2,400000 ;SETUP MULTIPLICAND MULB AC,AC-2 JSP AC-3,.+1 ;SAVE FLAGS CAME AC,[1B0] ;TEST HIGH PRODUCT ER3 AC,4721 CAME AC+1,[1B0] ;TEST LOW PRODUCT ER4 AC+1,4721 CAME AC-2,[1B0] ;TEST HIGH PRODUCT ER5 AC-2,4721 JOV .+2 ;TEST AROV ER13 AC-3,4721 ;FAIL IF AROV NOT SET JUMPL AC+2,F4720 ;LOOP ON ERROR SWITCH SUBTTL DIAGNOSTIC SECTION - INTEGER MPY TEST ;MULTIPLIER =400000 000000 ;MULTIPLICAND = 2,4 AC=10 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=5000 ZZ=1 F5000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVSI AC,400000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND IMUL AC,AC-1 ;MUL 400000 000000 X ZZ SKIPE AC ;TEST PROD = 0 ER3 AC,SN JUMPL AC+2,.-5 ;LOOP ON ERROR SWITCH > ;TEST AROV SET ;TEST ABILITY TO SET AROV FLAG ;NUMBERS OF LIKE SIGNS ARE MULTIPLIED ;AND TESTED FOR OVERFLOW/OVERFLOW NOT ;NUMBERS OF UNLIKE SIGNS ARE MULTIPLIED ;AND TESTED FOR OVERFLOW NOT AC=14 SAVEAC (1,1) SN=5100 XX=200000 ZZ=1 ;TEST 2 POSITS-OVERFLOW NOT F5100: REPEAT ^D2,< SN=SN+1 XX=XX+200000 ZZ=ZZ+1 JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST MOVEI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND IMUL AC,AC-1 ;MUL 000000 200000 X ZZ JSP AC+1,.+1 CAIE AC,XX ER3 AC,SN JOV .+2 ;TEST FOR SET COND JRST .+2 ;FLAG IS NOT SET ER13 AC+1,SN ;FLAG IS SET JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > PAGE SN=5200 XX=40000 ZZ=1 ;TEST 2 POSITS-OVERFLOW F5200: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+1 JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP MULTIPLICAND MOVSI AC-2,XX&200000 IMUL AC,AC-1 ;MUL 200000 000000 X ZZ JSP AC+1,.+1 CAME AC,AC-2 ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR SET CONDITION ER13 AC+1,SN ;FLAG DID NOT SET JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > SN=5300 XX=1 ZZ=0 ;TEST 2 NEGATS-OVERFLOW NOT F5300: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ-1 JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST HRROI AC,-2 ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND IMUL AC,AC-1 ;MULTIPLY -2 X ZZ JSP AC+1,.+1 CAIE AC,XX ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR SET NOT CONDITION JRST ,.+2 ;FLAG NOT SET ER13 AC+1,SN ;FLAG IS SET JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > PAGE SN=5400 ZZ=-1 ;TEST 2 NEGATS-OVERFLOW F5400: REPEAT ^D2,< SN=SN+1 ZZ=ZZ-1 JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST MOVSI AC,400000 ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND IMUL AC,AC-1 ;MUL 400000 000000 X ZZ JSP AC+1,.+1 CAME AC,[1B0] ;TEST PROD ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR SET CONDITION ER13 AC+1,SN ;FLAG DID NOT SET JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > SN=5500 XX=1000000 ZZ=-1 ;TEST UNLIKE,OVERFLOW NOT F5500: REPEAT ^D2,< SN=SN+1 XX=XX/2 ZZ=ZZ-1 JRSTF @[.+1] ;CLR ALL FLAGS,EXEC NEXT INST MOVEI AC,200000 ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND HRROI AC-2,XX IMUL AC,AC-1 ;MUL 000000 200000 X ZZ JSP AC+1,.+1 CAME AC,AC-2 ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR SET NOT COND JRST ,.+2 ;FLAG NOT SET ER13 AC+1,SN ;FLAG IS SET JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;PLIER = -1 ;PLICAND = 1,2 AC=11 SAVEAC (1,1) SN=5600 XX=1000000 ZZ=0 F5600: REPEAT ^D2,< SN=SN+1 XX=XX-1 ZZ=ZZ+ZZ IFE ZZ, JRSTF @[.+1] ;CLR ALL FLAGS,EXEC NEXT INST SETO AC, ;SETUP MULTIPLIER HRROI AC-1,ZZ ;SETUP MULTIPLICAND IMUL AC,AC-1 ;MULTIPLY -1 X ZZ JSP AC+1,.+1 CAIE AC,XX ER3 AC,SN ;C(AC) FAILED JOV .+2 JRST ,.+2 ER13 AC+1,SN JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > PAGE ;MULTIPLIER = -1 ;PLICAND = 200000 000000,200000 000010 AC=13 SAVEAC (1,1) SN=5700 XX=600010 ZZ=177770 F5700: REPEAT ^D2,< SN=SN+1 XX=XX-10 ZZ=ZZ+10 JRSTF @[.+1] ;CLR ALL FLAGS,EXEC NEXT INST SETO AC, ;SETUP MULTIPLIER MOVSI AC-1,ZZ ;SETUP MULTIPLICAND MOVSI AC-2,XX IMUL AC,AC-1 ;MULTIPLY -1 X ZZ JSP AC+1,.+1 CAME AC,AC-2 ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ER13 AC+1,SN JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;MULTIPLIER = 0,1 ;MULTIPLICAND = 400000 000000 AC=12 SAVEAC (1,1) SN=6000 XX=100000 ZZ=-1 F6000: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+1 JRSTF @[.+1] ;CLR ALL FLAGS,EXEC NEXT INST MOVEI AC,ZZ ;SETUP MULTIPLIER MOVSI AC-1,400000 ;SETUP MULTIPLICAND MOVSI AC-2,XX&400000 IMUL AC,AC-1 ;MUL ZZ X 400000 000000 JSP AC+1,.+1 CAME AC,AC-2 ER3 AC,SN ;C(AC) FAILED JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ;BOTH CLEARS ASSERTED ER13 AC+1,SN ;EITHER CLEAR FAILED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > PAGE F6010: JRSTF @[.+1] ;CLEAR ALL FLAGS MOVSI AC,200000 ;SETUP MULTIPLIER MOVEI AC-1,2 ;SETUP MULTIPLICAND IMULB AC,AC-1 JSP AC+1,.+1 ;SAVE FLAGS CAIE AC,0 ER3 AC,6011 ;C(AC) FAILED CAIE AC-1,0 ER5 AC-1,6011 ;C(E) FAILED JOV .+2 ER13 AC+1,6011 ;AROV DID NOT SET JUMPL AC+2,F6010 ;LOOP ON ERROR SWITCH ;TEST IMUL-IMMEDIATE MODE ;TEST ABILITY TO MULTIPLY WITH THE ;EFFECTIVE ADDRESS AS THE MULTIPLICAND ;THE PROD WILL EQUAL THE EFFECTIVE ;ADDRESS ;A FAILURE INDICATES MULTIPLYING ;BY C(E) VICE E AC=10 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=6100 ZZ=1 ;TEST IMMEDIATE MODE F6100: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC-2,AC-1 ;SETUP FOR COMPARISON MOVEI AC,1 ;SETUP MULTIPLIER MOVEI AC-1,ZZ ;SETUP AC-1 IMULI AC,AC-1 ;EFFECTIVE ADDRESS=7 CAME AC,AC-2 ;TEST PROD = ZZ ER3 AC,SN ;MULTIPLIED BY C(E) VICE E JUMPL AC+2,.-6 ;LOOP ON ERROR SWITCH > ;TEST IMUL-MEMORY MODE AC=7 SAVEAC (1,1) SN=6300 ZZ=1 F6300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC-2,ZZ ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP MULTIPLIER MOVEI AC-1,7 ;SETUP MULTIPLICAND IMULM AC,AC-1 ;MULTIPLY ZZ X 7 CAME AC,AC-2 ;TEST FOR PRODUCT IN AC ER3 AC,SN CAIE AC-1,ZZ*7 ;TEST FOR PROD IN E ER5 AC-1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST IMUL-BOTH MODE ;TEST ABILITY TO STORE PRODUCT IN AC,E ;AC, AC-1 ARE COMPARED FOLLOWING ;MULTIPLY ;AN ERROR WILL OCCUR IF AC DIFFERS FROM ;AC-1 AC=6 SAVEAC (1,1) SN=6500 ZZ=4 ;TEST STORING AC,E F6500: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP MULTIPLIER MOVEI AC-1,2 ;SETUP MULTIPLICAND IMULB AC,AC-1 ;MULTIPLY ZZ X 2 CAME AC,AC-1 ;COMPARE AC,AC-1 ER3 AC,SN JUMPL AC+2,.-5 ;LOOP ON ERROR SWITCH > SUBTTL DIAGNOSTIC SECTION - INTEGER DIVIDE TEST ;TEST FETCH,STORE AND DECODE ;TEST ABILITY TO FETCH CONTENTS OF E ;TEST ABILITY TO STORE AC,AC+1 ;DVND = 000000 777777,000000 777776 ;DVSR = 000000 777777,000000 777776 ;DVND = 000000 3400000 ;DVSR = 2 AC=7 SAVEAC (1,1) SN=6600 ZZ=0 ;TEST SAC,SAC2 FAILING F6600: REPEAT ^D2,< SN=SN+1 ZZ=&777777 IFE ZZ, JRSTF @[.+1] ;CLR ALL FLGS,EXEC NEXT INST MOVEI AC,ZZ ;SETUP DVND MOVEI AC+1,ZZ ;SETUP DVSR IDIV AC,AC+1 ;DIVIDE ZZ BY ZZ JSP AC-3,.+1 JOV .+2 ;TEST FOR OVFL JRST .+2 ER13 AC-3,SN CAIE AC,1 ;TEST AC FOR QUOTIENT = 1 ER3 AC,SN CAIE AC+1,0 ;TEST AC+1 FOR REMAINDER = 0 ER4 AC+1,SN JUMPL AC+2,.-^D13 ;LOOP ON ERROR SWITCH JRSTF @[.+1] ;CLEAR ALL FLAGS > PAGE ;TEST FCE FAILING F6700: MOVEI AC-2,160000 ;SETUP FOR COMPARISON MOVEI AC,340000 ;SETUP DVND MOVEI AC+1,2 ;SETUP DVSR IDIV AC,AC+1 ;DIV 000000 340000 BY 2 CAME AC,AC-2 ;TEST QUOT = 000000 020000 ER3 AC,6701 JUMPL AC+2,F6700 ;LOOP ON ERROR SWITCH ;DVND = 4,10 ;DVSR = 2 ;FAILURE RESULTS IN A QUOT = 0, ;A REMD = DVND (SIGN IS NEGATIVE) AC=7 SAVEAC (1,1) SN=7000 ZZ=2 F7000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 2 SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST AROV SET ;DVND = 4,10 ;DVSR = 0 (DIVIDE CHECK CONDITION) AC=14 SAVEAC (1,1) SN=7100 ZZ=2 ;TEST OVERFLOW COND F7100: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLGS,EXEC NEXT INST MOVEI AC,ZZ ;SETUP DVND MOVEI AC+1,ZZ SETZ AC-1, ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY 0 JSP AC-3,.+1 CAIE AC,ZZ ER3 AC,SN ;C(AC) WAS CLOBBERED CAIE AC+1,ZZ ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JOV .+2 ;TEST FOR OVERFLOW ER13 AC-3,.+1 ;AROV FAILED TO SET TLNN AC-3,DCK ER13 AC-3,SN ;DCK NOT SET JUMPL AC+2,.-^D14 ;LOOP ON ERROR SWITCH > PAGE ;DVND = 4,10 ;DVSR = 4,10 AC=11 SAVEAC (1,1) SN=7400 ZZ=2 F7400: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY ZZ JSP AC-2,.+1 CAIE AC,1 ER3 AC,SN ;C(AC) FAILED CAIE AC+1,0 ER4 AC+1,SN ;C(AC+1) FAILED JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ER13 AC-2,SN JUMPL AC+2,.-^D12 > ;DVND = 2,4 ;DVSR = 400000 000000 AC=7 SAVEAC (1,1) SN=7500 ZZ=1 F7500: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST MOVEI AC,ZZ ;SETUP DVND MOVSI AC-1,400000 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY (-N) JSP AC-2,.+1 CAIE AC,0 ER3 AC,SN ;C(AC) WAS CLOBBERED CAIE AC+1,ZZ ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ER13 AC-2,SN JUMPL AC+2,.-^D12 > PAGE ;DVND = 7,13 ;DVSR = 2 AC=6 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=7600 ZZ=3 F7600: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+4 MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY 2 CAIE AC,ZZ/2 ;TEST QUOT ER3 AC,SN CAIE AC+1,1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;DVND = 2,4 ;DVSR = 2,4 AC=5 SAVEAC (1,1) SN=7700 XX=0 ZZ=1 F7700: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ IFE XX, SETOM AC+1 ;INITIALIZE REMAINDER MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY (ZZ) CAIE AC,1 ;TEST QUOT ER3 AC,SN SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = 177777 777777,0777777 777777 ;DVSR = 1 AC=4 SAVEAC (1,1) SN=10000 ZZ=377777 F10000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ/2 HRLOI AC-2,ZZ ;SETUP FOR COMPARISON HRLOI AC,ZZ ;SETUP DVND MOVEI AC-1,1 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 1 CAME AC,AC-2 ;TEST QUOTIENT ER3 AC,SN SKIPE AC+1 ;TEST REMAINDER ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST ABILITY TO SWAP REMD ;AND QUOT ;DVND = 5,13 ;DVSR - 3 ;FAILURE RESULTS IN A QUOT ;EQUAL TO THE REMD AC=14 SAVEAC (1,1) SN=10300 ZZ=-1 F10300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+6 MOVEI AC-2,2 MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,3 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 3 CAIE AC,ZZ/3 ;TEST QUOT ER3 AC,SN CAME AC+1,AC-2 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = 2,4 ;DVSR = 1 ;DVND = 377777 777777,177777 777777 ;DVSR = 1 AC=13 SAVEAC (1,1) SN=10400 ZZ=1 F10400: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,1 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 1 CAIE AC,ZZ ;TEST QUOT ER3 AC,SN SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > PAGE SN=10500 ZZ=0 F10500: REPEAT ^D2,< SN=SN+1 ZZ=ZZ/2 IFE ZZ, HRLOI AC-2,ZZ ;SETUP FOR COMPARISON HRLOI AC,ZZ ;SETUP DVND MOVEI AC-1,1 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 1 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = 100 ;DVSR = 2,4 ;FAILURE RESULTS IN A QUOT = 252525 252525 AC=4 SAVEAC (1,1) SN=11300 ZZ=1 F11300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,100 ;SETUP DVND MOVEI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE 100 BY (ZZ) CAIE AC,100/ZZ ;TEST QUOT ER3 AC,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;DVND = 4,10 ;DVSR = -2 ;FAILURE OF EITHER RESULTS IN A QUOT ;= 2'S COMP ACTUAL,A REMD = 0 AC=11 SAVEAC (1,1) SN=11400 XX=-1 ZZ=2 F11400: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ HRROI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP DVND HRROI AC-1,-2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY -2 SKIPE AC+1 ;TEST REMD = 0 ER4 AC+1,SN CAME AC,AC-2 ;TEST QUOTIENT ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = 377777 777777,177777 777777 ;DVSR = 2 AC=12 SAVEAC (1,1) SN=12000 XX=377777 ZZ=0 F12000: REPEAT ^D2,< SN=SN+1 XX=XX/2 ZZ=ZZ/2 IFE ZZ, HRLOI AC-2,XX ;SETUP FOR COMPARISON HRLOI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY 2 CAIE AC+1,1 ER4 AC+1,SN CAME AC,AC-2 ;TEST QUOT = 1/2 DVND ER3 AC,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = 4,10 ;DVSR = 400000 000000 SN=12300 ZZ=2 F12300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP DVND MOVSI AC-1,400000 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (ZZ) BY (-N) SKIPE AC ;TEST QUOT ER3 AC,SN CAIE AC+1,ZZ ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;DVND = -40,-20 ;DVSR = 2 AC=6 SAVEAC (1,1) SN=12600 ZZ=-100 F12600: REPEAT ^D2,< SN=SN+1 ZZ=ZZ/2 HRROI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 2 CAME AC,[ZZ/2] ;TEST QUOT = 0 ER3 AC,SN SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;DVND = -100,-40 ;DVSR = 2 AC=4 SAVEAC (1,1) SN=13000 ZZ=-200 F13000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ/2 HRROI AC-2,ZZ/2 ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (-ZZ) BY 2 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN SKIPE AC+1 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;FAILURE RESULTS IN A QUOT AND ;REMD WHICH ARE THE TWO'S ;COMPLEMENT OF ACTUAL ;DVND = -7,-17 ;DVSR = 4 AC=14 SAVEAC (1,1) SN=13200 ZZ=1 F13200: REPEAT ^D2,< SN=SN+1 ZZ=ZZ-10 HRROI AC-2,ZZ/4 ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP DVND MOVEI AC-1,4 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (-ZZ) BY 4 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN HRROI AC-2,-3 ;SETUP FOR COMPARISON CAME AC+1,AC-2 ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;DVND = -77,-37 ;DVSR = 2 AC=13 SAVEAC (1,1) SN=13300 ZZ=-177 F13300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ/2 HRROI AC-2,-1 ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (-ZZ) BY 2 CAME AC+1,AC-2 ;TEST REMD ER4 AC+1,SN HRROI AC-2,ZZ/2 ;SETUP FOR COMPARISON CAME AC,AC-2 ;TEST QUOTIENT ER3 AC,AC-2 JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;DVND = -4,-10 ;DVSR = 2 AC=12 SAVEAC (1,1) SN=13500 ZZ=-2 F13500: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ HRROI AC-2,ZZ/2 ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (-ZZ) BY 2 CAME AC,AC-2 ;TEST QUOTIENT ER3 AC,SN SKIPE AC+1 ;TEST REMAINDER ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST IDIV- TWO NEGATIVES ;TEST ABILITY TO DIVIDE TWO ;NEGATIVE NUMBERS ;TEST EXERCISES MAJORITY ;OF IDIV LOGIC GATES ;DVND = -2,-4 ;DVSR = -2,-4 AC=7 SAVEAC (1,1) SN=14000 ZZ=-1 ;DIVIDE TWO NEGATIVES F14000: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ HRROI AC,ZZ ;SETUP DVND HRROI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE (-ZZ) BY (-ZZ) CAIE AC,1 ;TEST QUOT (POSITIVE) ER3 AC,SN ;INCORRECT SIGN SKIPE AC+1 ;TEST REMAINDER ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST IDIV -IMMEDIATE MODE ;TEST ABILITY TO DIVIDE BY E VICE C(E) ;DVND = 2,4 ;DVSR = E (C(E)=0) SN=14100 AC=12 ZZ=1 ;TEST IDIV-IMM MODE F14100: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ AC=AC-1 SAVEAC (1,1) ;SAVE ERROR AC JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST MOVEI AC,ZZ ;SETUP DVND SETZ AC-1, ;SETUP OVFL CONDITION IDIVI AC,AC-1 ;DIVIDE (ZZ) BY E JSP AC-1,.+1 CAIE AC,0 ER3 AC,SN ;C(AC) FAILED CAIE AC+1,ZZ ER4 AC+1,SN ;C(AC+1) FAILED JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ;DIVIDED (ZZ) BY E ER13 AC-1,SN ;DIVIDED (ZZ) BY C(E) JUMPL AC+2,.-^D14 ;LOOP ON ERROR SWITCH > PAGE ;TEST IDIV-MEMORY MODE ;DVND = 10,20 ;DVSR = 2 AC=14 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=14200 ZZ=4 ;TEST IDIV-MEMORY MODE F14200: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC+1,ZZ ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIVM AC,AC-1 ;DIVIDE (ZZ) BY 2 CAME AC,AC+1 ER3 AC,SN CAIE AC-1,ZZ/2 ;TEST SCE ER5 AC-1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST IDIV-BOTH MODE ;TEST ABILITY TO STORE QUOT ;IN AC AND E ;TEST ABILITY TO STORE REMD ;IN AC+1 AC=13 SAVEAC (1,1) SN=14300 ZZ=1 ;TEST IDIV-BOTH MODE F14300: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+2 SETZ AC+1, ;CLEAR AC+1 MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIVB AC,AC-1 ;DIVIDE (ZZ) BY 2 CAME AC,AC-1 ;TEST QUOT (C(AC)=C(E)) ER3 AC,SN ;STORE QUOTIENT FAILED CAIE AC+1,1 ;TEST REMD(=1) ER4 AC+1,SN ;STORE REMAINDER FAILED JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > PAGE ;TEST IDIV ;DVND = 400000000000 ;DVSR = 2 ;QUOT = 600000000000 ;REMND = 0 AC=13 SAVEAC (1,1) ZZ=400000 XX=600000 F14400: SETO AC+1, ;INITIALIZE REMAINDER STORAGE MOVSI AC-2,XX ;SET UP COMPARISON FOR QUOTIENT SETZ AC-3, ;SET UP COMPARISON FOR REMAINDER MOVSI AC,ZZ ;SET UP DIVIDEND MOVEI AC-1,2 ;SET UP DIVISOR IDIV AC,AC-1 ;DIVIDE 400000000000 BY 2 CAME AC,AC-2 ;TEST QUOTIENT ER3 AC,14401 ;STORE QUOTIENT FAILED CAME AC+1,AC-3 ;TEST REMAINDER ER4 AC+1,14401 ;STORE REMAINDER FAILED JUMPL AC+2,F14400 ;LOOP ON ERROR SWITCH ;TEST IDIVB (DIVIDE CHECK) F14410: JRSTF @[.+1] ;CLEAR ALL FLAGS MOVEI AC,4 ;SETUP DIVIDEND MOVEI AC+1,4 ;SETUP REMAINDER SETZ AC-1, ;SETUP DIVISOR IDIVB AC,AC-1 JSP AC-2,.+1 ;SAVE FLAGS CAIE AC,4 ER3 AC,14411 ;C(AC) WAS CLOBBERED CAIE AC+1,4 ER4 AC+1,14411 ;C(AC+1) WAS CLOBBERED CAIE AC-1,0 ER5 AC-1,14411 ;C(E) WAS CLOBBERED JOV .+2 ER13 AC-2,14411 ;ARCV FAILED TO SET TLNN AC-2,DCK ER13 AC-2,14411 ;'DCK' FAILED TO SET JUMPL AC+2,F14410 ;LOOP ON ERROR SWITCH SUBTTL DIAGNOSTIC SECTION - FRACTIONAL DIVIDE TEST ;TEST FAC2 AND DECODE ;TEST OF ABILITY TO ASSERT IRDIV ;TEST ABILITY TO FETCH C(AC+1) AC=13 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=14500 XX=4000000001 ZZ=2 ;TEST FAC2 FAILING(IRDIV) F14500: REPEAT ^D2,< SN=SN+1 XX=XX+XX-1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP HIGH DVND MOVEI AC+1,200 ;SETUP LOW DVND MOVEI AC-1,200 ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (N) BY 200 CAME AC,[XX] ;TEST BIT 35(1) (ODD QUOT) ER3 AC,SN SKIPE &17 ;TEST REMD = 0 ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;HIGH DVND = 2,4 ;LOW DVND = 0 ;DVSR = 2,4 AC=6 SAVEAC (1,1) SN=14600 ZZ=1 F14600: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST MOVEI AC,ZZ ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND MOVEI AC-1,ZZ ;SETUP DVSR DIV AC,AC-1 ;DIVIDE ZZ BY ZZ JSP AC-2,.+1 JOV .+2 ;TEST AROV FLAG ER13 AC-2,SN TLNN AC-2,DCK ER13 AC-2,SN ;DCK FAILED TO SET CAIE AC,ZZ ;EXAMINE QUOTIENT ER3 AC,SN ;C(AC) WAS CLOBBERED SKIPE &17 ;EXAMINE REMAINDER ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JUMPL AC+2,.-^D14 ;LOOP ON ERROR SWITCH > PAGE ;=2 ;HIGH DVND = 4 ;LOW DVND = 4 ;DVSR = 10,20 AC=5 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=14700 ZZ=4 F14700: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC-2,4 ;SETUP FOR COMPARISON MOVEI AC,4 ;SETUP HIGH DVND MOVEI AC+1,4 ;SETUP LOW DVND MOVEI AC-1,ZZ ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (N) BY ZZ CAME AC+1,AC-2 ;TEST REMD = 2 ER4 AC+1,SN JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;HIGH DVND = -1 ;LOW DVND = -4,-10 ;DVSR = 2 AC=13 SAVEAC (1,1) SN=15000 XX=-1 ZZ=-2 F15000: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ HRROI AC-2,XX ;SETUP FOR COMPARISON SETO AC, ;SETUP HIGH DVND HRROI AC+1,ZZ ;SETUP LOW DVND MOVEI AC-1,2 ;SETUP DVSR DIV AC,AC-1 ;DIVIDE ZZ BY 2 SKIPE AC+1 ;TEST REMD = 0 ER4 AC+1,SN CAME AC,AC-2 ;TEST QUOT ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;HIGH DVND = -1 ;LOW DVND = 2,4 ;DVSR = -2,-4 AC=14 SAVEAC (1,1) SN=15100 XX=-1 YY=377777 ZZ=1 F15100: REPEAT ^D2,< SN=SN+1 XX=XX+XX YY=YY/2 ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST SETO AC, ;SETUP HIGH DVND MOVEI AC+1,ZZ ;SETUP LOW DVND HRROI AC-1,XX ;SETUP DVSR HRLOI AC-3,YY DIV AC,AC-1 ;DIVIDE (-N) BY (XX) JSP AC-2,.+1 CAME AC,&17 ER3 AC,SN ;C(AC) FAILED CAIE AC+1,0 ER4 AC+1,SN ;C(AC+1) FAILED JOV .+2 ;TEST AROV FLAG JRST ,.+2 ER13 AC-2,SN ;AROV SET TLNE AC-2,DCK ER13 AC-2,SN ;DCK SET JUMPL AC+2,.-^D16 ;LOOP ON ERROR SWITCH > ;HIGH DVND = -2,-4 ;LOW DVND = -1 ;DVSR = 2,4 AC=12 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=15200 XX=1 YY=1B0 ZZ=-1 F15200: REPEAT ^D2,< SN=SN+1 XX=XX+XX YY=YY_-1 ZZ=ZZ+ZZ HRROI AC,ZZ ;SETUP HIGH DVND SETO AC+1, ;SETUP LOW DVND MOVEI AC-1,XX ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (-N) BY (XX) CAME AC,[1B0+YY] ;TEST FOR ODD NUMBER QUOTIENT ER3 AC,SN CAME AC+1,[-1] ;TEST REMD ER4 AC+1,SN JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;OPERANDS SELECTED SHOULD RESULT ;IN OVERFLOW ;HIGH DVND = -100,-40 ;LOW DVND = 0 ;DVSR = 100,40 AC=6 SAVEAC (1,1) SN=15600 WW=-200 XX=200 ZZ=-200 F15600: REPEAT ^D2,< SN=SN+1 WW=WW/2 XX=XX/2 ZZ=ZZ/2 JRSTF @[.+1] ;CLR ALL FLAGS, EXEC NEXT INST HRROI AC-2,WW ;SETUP AC-2 FOR COMPARISON HRROI AC,ZZ ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND MOVEI AC-1,XX ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (-N) BY (N) JSP AC-3,.+1 JOV .+2 ;TEST FOR OVERFLOW ER13 AC-3,SN TLNN AC-3,DCK ER13 AC-3,SN ;DCK NOT SET CAME AC,AC-2 ;TEST FOR UNIQUE QUOTIENT ER3 AC,SN CAIE AC+1,0 ER4 AC+1,SN ;C(AC+1) FAILED JUMPL AC+2,.-^D16 ;LOOP ON ERROR SWITCH > ;OPERANDS SELECTED SHOULD RESULT IN OVERFLOW ;HIGH DVND = -2,-4 ;LOW DVND = 0 ;DVSR = 2 AC=5 SAVEAC (1,1) SN=15700 XX=-1 ZZ=-1 F15700: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST HRROI AC,ZZ ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND MOVEI AC-1,2 ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (-N) BY 2 JSP AC-2,.+1 JOV .+2 ;TEST FOR OVERFLOW ER13 AC-2,SN CAME AC,[XX] ;TEST QUOT ER3 AC,SN JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > ;OPERANDS SELECTED WILL NOT OVERFLOW ;HIGH DVND = -1,-2 ;LOW DVND = -1 ;DVSR = -1,-2 AC=14 SAVEAC (1,1) SN=16100 ZZ=0 F16100: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST HRROI AC,ZZ ;SETUP HIGH DVND SETO AC+1, ;SETUP LOW DVND HRROI AC-1,ZZ ;SETUP DVSR DIV AC,AC-1 ;DIVIDE (-N) BY (-N) JSP AC-3,.+1 JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ER13 AC-3,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;TEST DIV-IMMEDIATE MODE ;TEST ABILITY TO DIVIDE BY E ;VICE C(E) ;TEST ABILITY TO INHIBIT ASSERTION ;OF IRMDFCE SN=16200 AC=7 ZZ=17 ;TEST DIV-IMM MODE F16200: REPEAT ^D2,< SN=SN+1 AC=AC-1 ZZ=ZZ-1 SAVEAC (1,1) ;SAVE ERROR AC JRSTF @[.+1] ;CLR ALL FLGS, EXEC NEXT INST MOVEI AC,4 ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND MOVEI AC-1,2 ;SETUP OVERFLOW CONDITION DIVI AC,ZZ ;DIVIDE (N) BY E JSP AC-3,.+1 JOV .+2 ;TEST FOR OVERFLOW JRST ,.+2 ;DIVIDED BY E ER13 AC-3,SN ;DIVIDED BY C(E) JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;TEST DIV-MEMORY MODE ;TEST ABILITY TO ASSERT IRMDSCE ;TEST ABILITY TO ASSERT IRMDSACINH AC=5 SAVEAC (1,1) JRSTF @[.+1] ;CLEAR ALL FLAGS SN=16300 XX=10000 ZZ=2 ;TEST DIV-MEM MODE F16300: REPEAT ^D2,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ MOVSI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP HIGH DVND MOVEI AC+1,ZZ ;SETUP LOW DVND MOVEI AC-1,100 ;SETUP DVSR DIVM AC,AC-1 ;DIVIDE (+N) BY 100 CAME AC-1,AC-2 ;TEST SCE ER5 AC-1,SN CAME AC,AC+1 ;TEST SAC INH ER3 AC,SN JUMPL AC+2,.-^D9 ;LOOP ON ERROR SWITCH > ;TEST DIV-BOTH MODE ;TEST ABILITY TO STORE QUOT ;IN AC,E ;TEST ABILITY TO STORE REMD ;IN AC+1 AC=14 SAVEAC (1,1) SN=16400 ZZ=2 ;TEST DIV-BOTH MODE F16400: REPEAT ^D2,< SN=SN+1 ZZ=ZZ+ZZ MOVEI AC,ZZ ;SETUP HIGH DVND MOVEI AC+1,100 ;SETUP LOW DVND MOVEI AC-1,100 ;SETUP DVSR DIVB AC,AC-1 ;DIVIDE (+N) BY 100 CAME AC,AC-1 ;TEST STORE QUOTIENT ER3 AC,SN ;STORE QUOTIENT FAILED SKIPE AC+1 ;TEST STORE REMAINDER ER4 AC+1,SN ;STORE REMAINDER FAILED JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > PAGE ;TEST DIVB (DIVIDE CHECK) F16410: JRSTF @[.+1] ;CLEAR ALL FLAGS MOVEI AC,4 ;SETUP HIGH DIVIDEND MOVEI AC+1,1 ;SETUP LOW DIVIDEND MOVEI AC-1,1 ;SETUP DIVISOR DIVB AC,AC-1 JSP AC-2,.+1 ;SAME FLAGS CAIE AC,4 ER3 AC,16411 ;C(AC) WAS CLOBBERED CAIE AC+1,1 ER4 AC+1,16411 ;C(AC+1) WAS CLOBBERED CAIE AC-1,1 ER5 AC-1,16411 ;C(E) WAS CLOBBERED JOV .+2 ER13 AC-2,16411 ;AROV FAILED TO SET TLNN AC-2,DCK ;DCK FAILED TO SET ER13 AC-2,16411 JUMPL AC+2,F16410 SUBTTL DIAGNOSTIC SECTION - GENERAL MPY/DIV TEST ;TEST MUL DIRECT - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;0500000000000 BY A DECREASING MULTIPLIER ;PLIER=200000000000, 100000000000 (1/2, 1/4) ETC ;PLICAND=050000000000 ;HIGH PROD=024000000000, 012000000000 ETC ;LOW PROD=0 AC=13 SAVEAC (1,1) SN=17100 XX=050000 ZZ=0 F17100: REPEAT ^D10,< SN=SN+1 XX=XX/2 ZZ=ZZ/2 IFE ZZ, MOVSI AC-2,XX ;SETUP FOR COMPARISON MOVSI AC,ZZ ;SETUP PLIER MOVSI AC-1,050000 ;SETUP PLICAND MUL AC,AC-1 ;MULTIPLY ZZ X 050000000000 SKIPE AC+1 ;TEST LOW PROD=0 ER4 AC+1,SN CAME AC,AC-2 ;TEST HIGH PROD=XX ER3 AC,SN ;MUL FAILED CAME AC-1,[050000,,0];WAS C(E) MODIFIED ? ER5 AC-1,SN ;C(E) WAS CLOBBERED JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > ;TEST MUL IMMEDIATE - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;E BY AND DECREASING MULTIPLIER ;PLIER=200000000000, 100000000000 (1/2, 1/4) ETC ;PLICAND=E (005001) ;HIGH PROD=2400,1200,500,240,120 ;LOW PROD=PLIER AC=12 SAVEAC (1,1) SN=17200 XX=005000 ZZ=0 F17200: REPEAT ^D5,< SN=SN+1 XX=XX/2 ZZ=ZZ/2 IFE ZZ, MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVSI AC,ZZ ;SETUP PLIER MULI AC,005001 ;MULTIPLY E BY ZZ CAME AC,AC-2 ;TEST HIGH PROD=XX ER3 AC,SN ;HIGH PROD ERROR MOVSI AC-2,ZZ ;SETUP FOR COMPARISON CAME AC+1,AC-2 ;TEST LOW PROD=PLIER ER4 AC+1,SN ;LOW PROD ERROR JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST MUL MEMORY - TWO NEGATIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;AN INCREASING NEGATIVE NUMBER BY -1 ;PLIER=-1 ;PLICAND=-1,-2,-4,-10,-20 ;HIGH PROD=0 AC=11 SAVEAC (1,1) SN=17300 ZZ=0 F17300: REPEAT ^D5,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, SETO AC, ;SETUP PLIER HRROI AC-1,ZZ ;SETUP PLICAND MULM AC,AC-1 ;MULTIPLY ZZ BY -1 SKIPE AC-1 ;TEST HIGH PROD = 0 ER5 AC,SN ;MULM FAILED JUMPL AC+2,.-5 ;LOOP ON ERROR SWITCH > ;TEST MUL BOTH - TWO NEGATIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;-1 BY AN INCREASING NEGATIVE NUMBER ;PLIER=-1,-2,-4,-10,-20 ;PLICAND=-1 ;HIGH PROD=0 ;LOW PROD=1,2,4,10,20 AC=10 SAVEAC (1,1) SN=17400 XX=0 ZZ=0 F17400: REPEAT ^D5,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ IFE XX, IFE ZZ, MOVEI AC-2,XX ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP PLIER SETO AC-1, ;SETUP PLICAND MULB AC,AC-1 ;MULTIPLY -1 BY ZZ SKIPE AC ;TEST HIGH PROD=0 ER3 AC,SN SKIPE AC-1 ;TEST C(AC) = C(E) ER5 AC-1,SN CAME AC+1,AC-2 ;TEST LOW PROD=XX ER4 AC+1,SN ;MULB FAILED JUMPL AC+2,.-^D10 ;LOOP ON ERR SWITCH > ;TEST MUL MEMORY - TWO NEGATIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;-5001 BY AN INCREASING NEGATIVE PLIER ;PLIER=600000000000, 700000000000 ETC. ;PLICAND=-5001 ;HIGH PROD=2400,1200,500,240,120 AC=7 SAVEAC (1,1) SN=17500 XX=005000 ZZ=0 F17500: REPEAT ^D5,< SN=SN+1 XX=XX/2 ZZ=ZZ/2 IFE ZZ, MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVSI AC,ZZ ;SETUP PLIER HRROI AC-1,-5001 ;SETUP PLICAND MOVE AC-3,&17 ;SAVE C(AC+1) MULM AC,AC-1 ;MULTIPLY ZZ X -5001 CAME AC-1,AC-2 ;TEST HIGH PROD = XX ER5 AC-1,SN ;MULM FAILED CAME AC,[ZZ,,0] ;WAS C(AC) MODIFIED ? ER3 AC,SN ;C(AC) WAS CLOBBERED CAME AC+1,&17 ;WAS C(AC+1) MODIFIED ? ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST IMUL DIRECT - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;A NUMBER BY ITSELF ;PLIER=2,4,10,20,40 ;PLICAND=2,4,10,20,40 ;PROD=4,20,100,400,2000 AC=6 SAVEAC (1,1) SN=17600 XX=1 ZZ=1 F17600: REPEAT ^D5,< SN=SN+1 XX=XX*4 ZZ=ZZ+ZZ IFE ZZ, MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP PLIER MOVEI AC-1,ZZ ;SETUP PLICAND IMUL AC,AC-1 ;MULTIPLY ZZ BY ZZ CAME AC,AC-2 ;TEST PROD=XX ER3 AC,SN ;IMUL FAILED CAIE AC-1,ZZ ;WAS C(E) MODIFIED ? ER5 AC-1,SN ;C(E) WAS CLOBBERED JUMPL AC+2,.-^D8 ;LOOP ON ERROR SWITCH > ;TEST IMUL IMMEDIATE - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;3 X E ;PLIER=3 ;PLICAND=E ;PROD=6,11,14,17,22 AC=5 SAVEAC (1,1) SN=17700 XX=3 ZZ=1 F17700: REPEAT ^D5,< SN=SN+1 XX=XX+3 ZZ=ZZ+1 MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,3 ;SETUP PLIER IMULI AC,ZZ ;MULTIPLY 3 X E CAME AC,AC-2 ;TEST PROD = XX ER3 AC,SN ;IMULI FAILED JUMPL AC+2,.-5 ;LOOP ON ERROR SWITCH > ;TEST IMUL MEMORY - TWO NEGATIVES ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;A NEGATIVE NUMBER BY ITSELF ;PLIER=-2,-4,-10,-20,-40 ;PLICAND=-2,-4,-10,-20,-40 ;PROD=4,20,100,400,2000 AC=4 SAVEAC (1,1) SN=20000 XX=1 ZZ=-1 F20000: REPEAT ^D5,< SN=SN+1 XX=XX*4 ZZ=ZZ+ZZ MOVEI AC-2,XX ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP PLIER HRROI AC-1,ZZ ;SETUP PLICAND MOVE AC-3,&17 ;SAVE C(AC+1) IMULM AC,AC-1 ;MULTIPLY ZZ BY ZZ CAME AC-1,AC-2 ;TEST PROD=XX ER5 AC-1,SN ;IMULM FAILED CAME AC,[-1,,ZZ] ;WAS C(AC) MODIFIED ? ER3 AC,SN ;C(AC) WAS CLOBBERED CAME AC+1,&17 ;WAS C(AC+1) MODIFIED ? ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST IMUL BOTH - MULTIPLY BY 0 ;TESTING IS ACCOMPLISHED BY MULTIPLYING ;A NEGATIVE NUMBER BY 0 ;PLIER=0 ;PLICAND=-1,-2,-4,-10,-20 ;PROD=0 AC=5 SAVEAC (1,1) SN=20100 ZZ=0 F20100: REPEAT ^D5,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, SETZ AC, ;SETUP PLIER HRROI AC-1,ZZ ;SETUP PLICAND IMULB AC,AC-1 ;MULTIPLY ZZ BY 0 SKIPE AC ;TEST PROD=0 ER3 AC,SN SKIPE AC-1 ;TEST C(AC) = C(E) ER5 AC-1,SN ;IMULB FAILED JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST IDIV DIRECT - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY ;DIVIDING A NUMBER BY ITSELF ;DVND=1,2,4, ETC ;DVSR=1,2,4, ETC ;AN ERROR WILL OCCUR IF QUOT ;DIFFERS FROM 1 ;AN ERROR WILL OCCUR IF REMD ;DIFFERS FROM 0 AC=5 SAVEAC (1,1) SN=20200 ZZ=0 F20200: REPEAT ^D18,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY ZZ CAIE AC,1 ;TEST QUOT=1 ER3 AC,SN JUMPE AC+1,.+2 ;TEST REMD=0 ER4 AC+1,SN ;IDIV FAILED JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > SN=20300 ZZ=0 F20300: REPEAT ^D17,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, MOVSI AC,ZZ ;SETUP DVND MOVSI AC-1,ZZ ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY ZZ CAIE AC,1 ;TEST QUOT=1 ER3 AC,SN JUMPE AC+1,.+2 ;TEST REMD=0 ER4 AC+1,SN ;IDIV FAILED JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST IDIV DIRECT - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY ;DIVIDING AN EVEN NUMBER BY 1 ;DVND=1,2,4 ETC ;DVSR=1 ;AN ERROR WILL OCCUR IF QUOT ;DIFFERS FROM DVND ;AN ERROR WILL OCCUR IF REMD ;DIFFERS FROM 0 AC=13 SAVEAC (1,1) SN=20400 ZZ=0 F20400: REPEAT ^D18,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, MOVEI AC-2,ZZ ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,1 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 1 CAME AC,AC-2 ;TEST QUOT=DVND ER3 AC,SN JUMPE AC+1,.+2 ;TEST REMD=0 ER4 AC+1,SN ;IDIV FAILED CAIE AC-1,1 ;WAS C(E) MODIFIED ? ER5 AC-1,SN ;C(E) WAS CLOBBERED JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > SN=20500 ZZ=0 F20500: REPEAT ^D17,< SN=SN+1 ZZ=ZZ+ZZ IFE ZZ, MOVSI AC-2,ZZ ;SETUP FOR COMPARISON MOVSI AC,ZZ ;SETUP DVND MOVEI AC-1,1 ;SETUP DVSR IDIV AC,AC-1 ;DIVIDE ZZ BY 1 CAME AC,AC-2 ;TEST QUOT=DVND ER3 AC,SN JUMPE AC+1,.+2 ;TEST REMD=0 ER4 AC+1,SN ;IDIV FAILED CAIE AC-1,1 ;WAS C(E) MODIFIED ? ER5 AC-1,SN ;C(E) WAS CLOBBERED JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > ;TEST IDIV IMMEDIATE - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY DIVIDING ;AN ODD NUMBER BY E ;DVND=3,5,7,11 ETC ;DVSR=E (2) ;QUOT=1,2,4, ETC ;REMD=1 AC=14 SAVEAC (1,1) SN=20600 XX=0 ZZ=1 F20600: REPEAT ^D10,< SN=SN+1 XX=XX+1 ZZ=ZZ+2 MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP DVND IDIVI AC,2 ;DIVIDE ZZ BY 2 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN CAIE AC+1,1 ;TEST REMD=1 ER4 AC+1,SN ;IDIVI FAILED JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST IDIV MEMORY - TWO NEGATIVES ;TESTING IS ACCOMPLISHED BY DIVIDING ;A NEGATIVE NUMBER BY -1 ;DVND=-1,-2,-4,-10,-20 ;DVSR=-1 ;QUOT=1,2,4,10,20 ;REMD=0 AC=12 SAVEAC (1,1) SN=20700 XX=0 ZZ=0 F20700: REPEAT ^D5,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ IFE XX, IFE ZZ, MOVEI AC-2,XX ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP DVND SETO AC-1, ;SETUP DVSR MOVE AC-3,&17 ;SAVE C(AC+1) IDIVM AC,AC-1 ;DIVIDE ZZ BY -1 CAME AC-1,AC-2 ;TEST QUOT ER5 AC-1,SN ;IDIVM FAILED CAME AC,[-1,,ZZ] ;WAS C(AC) MODIFIED ? ER3 AC,SN ;C(AC) WAS CLOBBERED CAME AC+1,&17 ;WAS C(AC+1) ALTERED ? ER4 AC+1,SN ;C(AC+1] WAS CLOBBERED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST IDIV BOTH - TWO POSITIVES ;TESTING IS ACCOMPLISHED BY DIVIDING ;AN INCREASING ODD NUMBER BY 2 ;DVND=15,17,21,23,25 ;DVSR=2 ;QUOT=6,7,10,11,12 ;REMD=1 AC=11 SAVEAC (1,1) SN=21000 XX=5 ZZ=13 F21000: REPEAT ^D5,< SN=SN+1 XX=XX+1 ZZ=ZZ+2 MOVEI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP DVND MOVEI AC-1,2 ;SETUP DVSR IDIVB AC,AC-1 ;DIVIDE ZZ BY 2 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN ;QUOT ERROR CAME AC,AC-1 ;C(AC) = C(E) ER5 AC-1,SN CAIE AC+1,1 ;TEST REMD=1 ER4 AC+1,SN ;IDIVB FAILED JUMPL AC+2,.-^D10 ;LOOP ON ERROR SWITCH > ;TEST DIV DIRECT - TWO POSITIVES ;HIGH DVND=4,10,20,40,100 ;LOW DVND=0 ;DVSR=2000 ;QUOT=001000000000, 00200000000 ETC ;REMD=0 AC=10 SAVEAC (1,1) SN=21100 XX=000400 ZZ=2 F21100: REPEAT ^D5,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ MOVSI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND MOVEI AC-1,2000 ;SETUP DVSR DIV AC,AC-1 ;DIVIDE ZZ BY 2000 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN JUMPE AC+1,.+2 ;TEST REMD ER4 AC+1,SN ;DIV FAILED CAIE AC-1,2000 ;WAS C(E) MODIFIED ? ER5 AC-1,SN ;C(E) WAS CLOBBERED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST DIV IMMEDIATE - TWO POSITIVES ;HIGH DVND=0 ;LOW DVND=3,4,5,6,7 ;DVSR=E (2,3,4,5,6) ;QUOT=1 ;REMD=1 AC=7 SAVEAC (1,1) SN=21200 XX=1 ZZ=2 F21200: REPEAT ^D5,< SN=SN+1 XX=XX+1 ZZ=ZZ+1 SETZ AC, ;SETUP HIGH DVND MOVEI AC+1,ZZ ;SETUP LOW DVND DIVI AC,XX ;SETUP DVSR CAIE AC,1 ;TEST QUOT=1 ER3 AC,SN CAIE AC+1,1 ;TEST QUOT=REMD ER4 AC+1,SN ;DIVI FAILED JUMPL AC+2,.-7 ;LOOP ON ERROR SWITCH > ;TEST DIV MEMORY - TWO NEGATIVES ;HI DVND = -2,-4,-10,-20,-40 ;LO DVND=0 ;DVSR=-200 ;QUOT=00400000000, 010000000000 ETC ;REMD=0 AC=6 SAVEAC (1,1) SN=21300 XX=002000 ZZ=-1 F21300: REPEAT ^D5,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ MOVSI AC-2,XX ;SETUP FOR COMPARISON HRROI AC,ZZ ;SETUP HIGH DVND SETZ AC+1, ;SETUP LOW DVND HRROI AC-1,-200 ;SETUP DVSR DIVM AC,AC-1 ;DIVIDE ZZ BY -200 CAME AC-1,AC-2 ;TEST QUOT ER5 AC-1,SN ;DIVM FAILED CAME AC,[-1,,ZZ] ;WAS C(AC) MODIFIED ? ER3 AC,SN ;C(AC) WAS CLOBBERED SKIPE &17 ;WAS C(AC+1) MODIFIED ? ER4 AC+1,SN ;C(AC+1) WAS CLOBBERED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > ;TEST DIV BOTH - TWO POSITIVES ;HIGH DVND 2,4,10,20,40 ;LOW DVND 2,4,10,20,40 ;DVSR=200 ;QUOT=00400000000, 010000000000 ETC ;REMD=2,4,10,20,40 AC=5 SAVEAC (1,1) SN=21400 XX=002000 ZZ=1 F21400: REPEAT ^D5,< SN=SN+1 XX=XX+XX ZZ=ZZ+ZZ MOVSI AC-2,XX ;SETUP FOR COMPARISON MOVEI AC,ZZ ;SETUP HIGH DVND MOVEI AC+1,ZZ ;SETUP LOW DVND MOVEI AC-1,200 ;SETUP DVSR DIVB AC,AC-1 ;DIVIDE ZZ BY 200 CAME AC,AC-2 ;TEST QUOT ER3 AC,SN ;QUOT ERROR CAME AC-1,AC-2 ;TEST C(AC) = C(E) ER5 AC-1,SN CAIE AC+1,ZZ ;TEST REMD ER4 AC+1,SN ;DIVB FAILED JUMPL AC+2,.-^D11 ;LOOP ON ERROR SWITCH > LAST1: ;JRST BEGEND ;REPEAT DIAGNOSTIC END START