	.TITLE EXAMP.MAC	(VERSION PROVIDED)

	.MCALL .TTYOUT, .EXIT, .PRINT



	N = 70.		;NO. OF DIGITS OF 'E' TO CALCULATE

;	'E' = THE SUM OF THE RECIPROCALS OF THE FACTORIALS
;	1/0! + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + ...

EXP:	.PRINT	#MESSAG		;PRINT INTRODUCTORY TEXT
	MOV	#N,R5		;NO. OF CHARS OF 'E' TO PRINT
FIRST:	MOV	#N+1,R0		;NO. OF DIGITS OF ACCURACY
	MOV	#A,R1		;ADDRESS OF DIGIT VECTOR
SECOND:	ASL	@R1		;DO MULTIPLY BY 10 (DECIMAL)
	MOV	@R1,-(SP)	;SAVE *2
	ASL	@R1		;*4
	ASL	@R1		;*8
	ADD	(SP)+,(R1)+	;NOW *10, POINT TO NEXT DIGIT
	DEC	R0		;AT END OF DIGITS?
	BNE	SECOND		;BRANCH IF NOT
	MOV	#N,R0		;GO THRU ALL PLACES, DIVIDING
THIRD:	MOV	-(R1),R3	;BY THE PLACES INDEX
	MOV	#-1,R2		;INIT QUOTIENT REGISTER
FOURTH:	INC	R2		;BUMP QUOTIENT
	SUB	R0,R3		;SUBTRACT LOOP ISN'T BAD
	BCC	FOURTH		;NUMERATOR IS ALWAYS < 10*N
	ADD	R0,R3		;FIX REMAINDER
	MOV	R3,@R1		;SAVE REMAINDER AS BASIS
				;FOR NEXT DIGIT
	ADD	R2-2(R1)	;GREATEST INTEGER CARRIES
				;TO GIVE DIGIT
	DEC	R0		;AT END OF DIGIT VECTOR?
	BNE	THIRD		;BRANCH IF NOT
	MOV	-(R1),R0	;GET DIGIT TO OUTPUT
FIFTH:	SUB	#10.,R0		;FIX THE 2.7 TO .7 SO
				;THAT IT IS ONLY 1 DIGIT
	BCC	FIFTH		;(REALLY DIVIDE BY 10)
	ADD	#10+'0,R0	;MAKE DIGIT ASCII
	.TTYON			;OUTPUT THE DIGIT
	CLR	@R1		;CLEAR NEXT DIGIT LOCATION
	DEC	R5		;MORE DIGITS TO PRINT?
	BNE	FIRST		;BRANCH IF YES
	.EXIT			;WE ARE DONE

EXP:	.REPT	N+1
	.WORD	1		;INIT VECTOR TO ALL ONES
	.ENDR

MESSAG:	.ASCII	/THE VALUE OF E IS:/ <15><12> /2./ <200>
	.EVEN

	.END	EXP
