Google
 

Trailing-Edge - PDP-10 Archives - klad_sources - klad.sources/dakakm.mac
There are no other files named dakakm.mac in the archive.
SUBTTL	DIAGNOSTIC SECTION

EXIT:	DROPDV			;CLOSE LOGICAL OUTPUT FILE
	EXIT

PGMNAM:	ASCIZ/
PDP-10  KA10 BASIC INSTRUCTION DIAGNOSTIC (11) [DAKAK]
/

;INITIALIZE

START:	PGMINT
	MOVE	[ASCIZ/AK/]
	MOVEM	TLET		;INITIALIZE TEST LETTER

STARTA:	JRST	F00		;GO PERFORM DIAGNOSTIC
SUBTTL	DIAGNOSTIC SECTION - MPY TEST - ZERO PRODUCT

	ADR=3000
	AC=14
	E=<AC-2>&17

F00:	SAVEAC	(1,1)

;MULTIPLY 0 BY 0 TO GET PRODUCT OF 0
	MOP1	(\ADR,0,-1,0,0,0)

	AC=13
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,	<
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY RIPPLED 1 BY 0 TO GET PRODUCT OF 0
	MOP1	(\ADR,0,-1,XX,0,0)>
	AC=12
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,	<
	ADR=ADR+1
	XX=XX+XX+1
	IFE	<XX-1>,<XX=-2>

;MULTIPLY RIPPLED 0 BY 0 TO GET PRODUCT OF 0
	MOP1	(\ADR,0,-1,XX,0,0)>
	ADR=ADR+1
	AC=14
	E=<AC-2>&17
	SAVEAC	(1,1)

;MULTIPLY -1 BY 0 TO GET PRODUCT OF 0
	MOP1	(\ADR,0,-1,-1,0,0)
SUBTTL	DIAGNOSTIC SECTION - MULTIPLICATION ALGORITHM

	AC=13
	E=<AC-2>&17
	SAVEAC	(1,1)

	XX=-1

			;MULTIPLICAND=1	
	REPEAT	^D16,<
;TEST MULTIPLICATION ALGORITHM
;VERIFY THAT (-MPY SHIFT) WORKS AS SPECIFIED IN THE
;KI10 MULTIPLICATION ALGORITHM. I.E., THE TWO LEAST
;SIGNIFICANT BITS OF THE MULTIPLIER (C(AC)) ARE
;EXAMINED AND THEN THE MULTIPLICAND (C(E)) IS MULTIPLIED BY THEM.
;THIS PROCESS IS REPEATED 18 TIMES IN ORDER
;TO MULTIPLY ALL 36 BITS OF THE AC.  THIS TEST IS
;EXECUTED 16 TIMES WITH C(AC)=0,1,3,4,..., 17 AND
;C(E)=1.  IT IS EXECUTED ANOTHER 16 TIMES AS ABOVE
;EXCEPT C(E)=-1 TO VERIFY THAT THE ALGORITHM IS INDEPENDENT
;OF C(E).

	ADR=ADR+1
	XX=XX+1

	MOP1	(\ADR,XX,-1,1,0,XX)>
	AC=12
	E=<AC-2>&17
	SAVEAC	(1,1)

	XX=-1

			;MULTIPLICAND=-1 
	REPEAT	^D16,<
;TEST MULTIPLICATION ALGORITHM
;VERIFY THAT (-MPY SHIFT) WORKS AS SPECIFIED IN THE
;KI10 MULTIPLICATION ALGORITHM, I.E., THE TWO LEAST
;SIGNIFICANT BITS OF THE MULTIPLIER (C(AC)) ARE
;EXAMINED AND THEN THE MULTIPLICAND (C(E)) IS MULTIPLIED BY THEM.
;THIS PROCESS IS REPEATED 18 TIMES IN ORDER
;TO MULTIPLY ALL 36 BITS OF THE AC.  THIS TEST IS
;EXECUTED 16 TIMES WITH C(AC)=0, 1,2,3,4, . . ., 17 AND
;C(E)=1.  IT IS EXECUTED ANOTHER 16 TIMES AS ABOVE
;EXCEPT C(E)=-1 TO VERIFY THAT THE ALGORITHM IS INDEPENDENT
;OF C(E).

	ADR=ADR+1
	XX=XX+1
	MX=-XX
	IFE	XX,<
	V1=-1
	V2=0>
	IFN	XX,<
	V1=0
	V2=-1>
	MOP1	(\ADR,XX,V1,-1,V2,MX)>
SUBTTL	DIAGNOSTIC SECTION - MPY TEST - ZERO PRODUCT

	AC=11
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,	<
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY 0 BY RIPPLED 1 TO GET PRODUCT OF ZERO
	MOP1	(\ADR,XX,-1,0,0,0)>
	AC=10
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,<
	ADR=ADR+1
	XX=XX+XX+1
	IFE	<XX-1>,<XX=-2>

;MULTIPLY 0 BY RIPPLED 0 TO GET PRODUCT OF 0
	MOP1	(\ADR,XX,-1,0,0,0)>
	AC=7
	E=<AC-2>&17
	SAVEAC	(1,1)
	ADR=ADR+1

;MULTIPLY 0 BY -1 TO GET PRODUCT OF 0
	MOP1	(\ADR,-1,-1,0,0,0)
SUBTTL	DIAGNOSTIC SECTION - MPY TEST - NON-ZERO PRODUCT

	AC=6
	E=<AC-2>&17
	SAVEAC	(1,1)

	XX=0

	REPEAT	^D36, <
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY A RIPPLED 1 BY 1 TO GET A PRODUCT OF RIPPLED 1
	IFG	XX,<V1=0>
	IFL	XX,<V1=-1>
	MOP1	(\ADR,1,-1,XX,V1,XX)>
	AC=5
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D35,<	;LAST CASE IS DIFFERENT
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY A 1 BY A RIPPLED 1 TO GET PRODUCT OF RIPPLED 1
	IFG	XX,<V1=0>
	IFL	XX,<V1=-1>
	MOP1	(\ADR,XX,-1,1,V1,XX)>
;MULTIPLY A 1 BY 400000,,0
	XX=400000000000
	ADR=ADR+1

	MOP1	(\ADR,XX,-1,1,1,0)
	AC=4
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,<
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY A RIPPLED ONE BY -1
	IFG	XX,<
	V1=-1
	V2=-XX>
	IFL	XX,<
	V1=1
	V2=0>
	MOP1	(\ADR,-1,0,XX,V1,V2)>
	AC=3
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D35,<	;LAST CASE IS DIFFERENT
	ADR=ADR+1
	XX=XX+XX
	IFE	XX,<XX=1>

;MULTIPLY -1 BY A RIPPLED 1
	IFG	XX,<
	V1=-1
	V2=-XX>
	IFL	XX,<
	V1=1
	V2=0>
	MOP1	(\ADR,XX,0,-1,V1,V2)>
;MULTIPLY A -1 BY 400000,,0
	ADR=ADR+1
	XX=400000000000

	MOP1	(\ADR,XX,0,-1,-1,XX)
	AC=2
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,<
	ADR=ADR+1
	XX=XX+XX+1
	IFE	<XX-1>,<XX=-2>

;MULTIPLY RIPPLED 0 BY 1 TO GET PRODUCT OF RIPPLED 0
	IFL	XX,<V1=-1>
	IFG	XX,<V1=0>
	MOP1	(\ADR,1,0,XX,V1,XX)>
	AC=10
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,<
	ADR=ADR+1
	XX=XX+XX+1
	IFE	<XX-1>,<XX=-2>

;MULTIPLY 1 BY RIPPLED 0 TO GET PRODUCT OF RIPPLED 0
	IFL	XX,<V1=-1>
	IFG	XX,<V1=0>
	MOP1	(\ADR,XX,0,1,V1,XX)>
	AC=10
	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 RIPPLED 0 BY -1
	MX=-XX
	IFL	XX,<V1=0>
	IFG	XX,<V1=-1>
	MOP1	(\ADR,-1,-1,XX,V1,MX)>
	AC=14
	E=<AC-2>&17
	SAVEAC	(1,1)
	XX=0

	REPEAT	^D36,	<
	ADR=ADR+1
	XX=XX+XX+1
	IFE	<XX-1>,<XX=-2>

;MULTIPLY -1 BY A RIPPLED 0
	MX=-XX
	IFL	XX,<V1=0>
	IFG	XX,<V1=-1>
	MOP1	(\ADR,XX,-1,-1,V1,MX)>
	N1=525252525252
	N2=252525252525
	AC=13
	E=<AC-2>&17
	SAVEAC	(1,1)
	WW=^D36
	XX=0
	ZZ=0

	REPEAT	^D35,	<	;LAST CASE DIFFERENT

	ADR=ADR+1
	WW=WW-1
	XX=XX+XX
	ZZ=ZZ+1
	IFE	XX,<ZZ=0>
	IFE	XX,<XX=1>

;MULTIPLY 1010...1010 BY A FLOATING 1
	V1=N1
	V2=<N1_ZZ>!1B0
	IFE	WW,<V2=0>
	IFL	XX,<V3=N2+1>
	IFG	XX,<V3=<<-1B<WW>>!<N1_<-WW>>>>
	MOP1	(\ADR,XX,0,V1,V3,V2)>

;MULTIPLY A 1010...1010 BY 400000,,0
	ADR=ADR+1
	XX=400000000000
	V1=525252525252
	V3=525252525252
	V2=400000000000

	MOP1	(\ADR,XX,0,V1,V3,V2)
LAST1:	JRST	BEGEND