Trailing-Edge
-
PDP-10 Archives
-
klad_sources
-
klad.sources/dskal1.mac
There are no other files named dskal1.mac in the archive.
EXIT: DROPDV ;CLOSE LOGICAL OUTPUT FILE
EXIT
PGMNAM: ASCIZ %
DECSYSTEM 2020 BASIC INSTRUCTION DIAGNOSTIC [DSKAL]
MULTIPLY & DIVIDE
%
;INITIALIZE SUBROUTINES
START: PGMINT
MOVE [ASCIZ/AL/]
MOVEM TLET
STARTA: JRST PART2 ;GO PERFORM DIAGNOSTIC
SUBTTL MAIN TESTING
ADR=4000
PART2: AC=14
E=<AC-2>&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,<XX=1>
;MULTIPLY A FLOATING 1 BY 1010...101010
V1=N1
V2=N1*XX
IFL XX,<V3=N2+1>
IFG XX,<V3=<<-1B<WW>>!<N1_<-WW>>>>
MOP1 (\ADR,V1,0,XX,V3,V2)>
AC=14
E=<AC-2>&17
SAVEAC (1,1)
WW=^D36
XX=0
REPEAT ^D36,<
ADR=ADR+1
WW=WW-1
XX=XX+XX
IFE XX,<XX=1>
;MULTIPLY 0101...0101 BY A FLOATING 1
V1=N2
V2=N2*XX
IFG XX,<V3=<N2_<-WW>>>
IFL XX,<V3=N1+1>
MOP1 (\ADR,XX,0,V1,V3,V2)>
AC=13
E=<AC-2>&17
SAVEAC (1,1)
WW=^D36
XX=0
REPEAT ^D36,<
ADR=ADR+1
WW=WW-1
XX=XX+XX
IFE XX,<XX=1>
;MULTIPLY A FLOATING 1 BY 0101...0101
V1=N2
V2=N2*XX
IFG XX,<V3=<N2_<-WW>>>
IFL XX,<V3=N1+1>
MOP1 (\ADR,V1,0,XX,V3,V2)>
AC=12
E=<AC-2>&17
SAVEAC (1,1)
XX=0
REPEAT ^D36,<
ADR=ADR+1
XX=XX+XX
IFE XX,<XX=1>
;MULTIPLY A FLOATING 1 BY ITSELF FOR A SQUARE PRODUCT
V1=XX*XX
IFG XX,<V2=<<<XX_-22>*<XX_-22>>_1>>
IFL XX,<V2=XX*XX>
MOP1 (\ADR,XX,-1,XX,V2,V1)>
AC=11
E=<AC-2>&17
SAVEAC (1,1)
XX=0
REPEAT ^D36,<
ADR=ADR+1
XX=XX+XX+1
IFE <XX-1>,<XX=-2>
;MULTIPLY A FLOATING 0 BY ITSELF FOR A SQUARE PRODUCT
V1=XX*XX
IFE <XX&1B1>,<V2A=1>
IFN <XX&1B1>,<V2A=0>
IFL XX,<V2=<<<<<-<XX+1>>_-22>*<<-<XX+1>>_-22>>_1>+V2A>>
IFG XX,<V2=XX-1>
MOP1 (\ADR,XX,-1,XX,V2,V1)>
AC=10
E=<AC-2>&17
SAVEAC (1,1)
XX=0
YY=0
REPEAT ^D36,<
ADR=ADR+1
XX=XX+XX
YY=YY+YY+1
IFE XX,<XX=1>
IFE <YY-1>,<YY=-2>
;MULTIPLY A FLOATING 1 BY A FLOATING 0
V1=XX*YY
IFE <XX_-22>,<V2A=-1>
IFN <XX_-22>,<V2A=<<<<YY_-22>+<YY_22>>*<XX_-21>>+<XX_-21>-1>>
IFG XX,<V2=V2A>
IFL XX,<V2=XX+1>
MOP1 (\ADR,YY,0,XX,V2,V1)>
AC=7
E=<AC-2>&17
SAVEAC (1,1)
XX=0
YY=0
REPEAT ^D36,<
ADR=ADR+1
XX=XX+XX
YY=YY+YY+1
IFE XX,<XX=1>
IFE <YY-1>,<YY=-2>
;MULTIPLY A FLOATING 0 BY A FLOATING 1
V1=XX*YY
IFE <XX_-22>,<V2A=-1>
IFN <XX_-22>,<V2A=<<<<YY_-22>+<YY_22>>*<XX_-21>>+<XX_-21>-1>>
IFG XX,<V2=V2A>
IFL XX,<V2=XX+1>
MOP1 (\ADR,XX,0,YY,V2,V1)>
;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,<YY=377777777776>
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
F500: REPEAT ^D2, ;TEST MQSHRT FAILING
<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
F700: REPEAT ^D2, ;TEST ARSHRT FAILING
<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
F1000: REPEAT ^D2, ;TEST MQSHRT FAILING
<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,<XX=-1>
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,<ZZ=200000>
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
CAIE AC,XX ;TEST HIGH PROD
ER3 AC,SN
SKIPE <AC+1>&17 ;TEST LOW 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,<XX=1>
IFE ZZ,<ZZ=200000>
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
CAIE AC,XX
ER3 AC,SN
SKIPE AC+1 ;TEST LOW 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
F4200: REPEAT ^D2, ;TEST IMMEDIATE MODE
<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
F4300: REPEAT ^D2, ;TEST SCE
<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
F4400: REPEAT ^D2, ;TEST SAC INH
<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
F4500: REPEAT ^D2, ;TEST SAC2 ASSERTED
<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
CAME AC,[1B0] ;TEST PROD = 400000 000000
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
F5100: REPEAT ^D2, ;TEST 2 POSITS-OVERFLOW NOT
<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
F5200: REPEAT ^D2, ;TEST 2 POSITS-OVERFLOW
<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
F5300: REPEAT ^D2, ;TEST 2 NEGATS-OVERFLOW NOT
<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
F5400: REPEAT ^D2, ;TEST 2 NEGATS-OVERFLOW
<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
SKIPE AC
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
F5500: REPEAT ^D2, ;TEST UNLIKE,OVERFLOW NOT
<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,<ZZ=1>
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
F6100: REPEAT ^D2, ;TEST IMMEDIATE MODE
<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
F6500: REPEAT ^D2, ;TEST STORING AC,E
<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
F6600: REPEAT ^D2, ;TEST SAC,SAC2 FAILING
<SN=SN+1
ZZ=<ZZ+ZZ>&777777
IFE ZZ,<ZZ=777777>
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
F7100: REPEAT ^D2, ;TEST OVERFLOW COND
<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,<XX=1>
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,<ZZ=377777>
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,<ZZ=377777>
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
F14000: REPEAT ^D2, ;DIVIDE TWO NEGATIVES
<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
F14100: REPEAT ^D2, ;TEST IDIV-IMM MODE
<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
F14200: REPEAT ^D2, ;TEST IDIV-MEMORY MODE
<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
F14300: REPEAT ^D2, ;TEST IDIV-BOTH MODE
<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
F14500: REPEAT ^D2, ;TEST FAC2 FAILING(IRDIV)
<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 <AC+1>&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 <AC+1>&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,<AC-3>&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,<ZZ=-1>
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
F16200: REPEAT ^D2, ;TEST DIV-IMM MODE
<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
F16300: REPEAT ^D2, ;TEST DIV-MEM MODE
<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
F16400: REPEAT ^D2, ;TEST DIV-BOTH MODE
<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,<ZZ=200000>
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,<ZZ=200000>
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,<ZZ=-1>
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,<XX=1>
IFE ZZ,<ZZ=-1>
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,<ZZ=-200000>
MOVEI AC-2,XX ;SETUP FOR COMPARISON
MOVSI AC,ZZ ;SETUP PLIER
HRROI AC-1,-5001 ;SETUP PLICAND
MOVE AC-3,<AC+1>&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,<AC-3>&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,<ZZ=-200000>
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,<AC+1>&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,<AC-3>&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,<ZZ=-1>
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,<ZZ=1>
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,<ZZ=1>
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,<ZZ=1>
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,<ZZ=1>
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,<XX=1>
IFE ZZ,<ZZ=-1>
MOVEI AC-2,XX ;SETUP FOR COMPARISON
HRROI AC,ZZ ;SETUP DVND
SETO AC-1, ;SETUP DVSR
MOVE AC-3,<AC+1>&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,<AC-3>&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 <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 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
>
JRST BEGEND