File: SEED.RA of Disk: V50/Source/Source-Listing-FORTRAN-2
(Source file text) 

	FIELD1	SETIDL
/IDLE RANDOM NUMBER GENERATOR
	EXTERN	#IDLE

	JA	#RET
	TEXT	+SETIDL+
SXR,	SETX	XR
	SETB	BP
BP,	F 0.0
XR,	ORG	.+3
EXP,	0
IDLAD,	ADDR	#IDLE-1		/ Pointer to idle routine in FRTS
POINT,
JOB,	ADDR	DOIT		/ Address of routine to run
	ORG	XR+10
K0100,	100
K0003,	3
ROTWRD, 0017
	#LBL=.
	COMMON	NUMCOM
NUMBER,	ORG	.+3

	COMMON	TXTCOM
RTEXT,	ORG	.+1147
LINES,	ORG	.+0044
ASCVAR,	ORG	.+0003
TXTLOC,	ORG	.+0003
DATA,	ORG	.+0352
	ORG	#LBL
SEEDPT,	ADDR	NUMBER
	0
DATHAK,	7777
	ADDR	ASCVAR
DATABL,	1763-1		/ Address of Direct Access table entry 8 in FRTS
COUNT,	0		/ Idle loop count
COUNT2,	7774		/ Outer counter
RESET,	7774		/ Outer counter value
X4=14			/ Autoindex reg
	ORG	10*3+BP
	FNOP
	JA	SXR
	0
RET,	JA	.

	BASE	0
#RET,	STARTD
	FLDA	10*3
	FSTA	RET
	SETB	BP
	BASE	BP
	STARTF
	TRAP4	SET8	/GO TO 8 MODE STUFF.
	JA	RET	/DONE. ON IDLE QUEUE.

SET8,	0
/
/ Horrible hackery. This sets up the FRTS direct access table
/ to allow us to open the ADVENT.DA file without having to
/ rebuild it each time. Open it using USR, and this lets us
/ go use it later. (DEFINE FILE always creates a new one.)
	TAD	DATABL
	DCAZ	X4
SCDF,	CDF	0
	TAD	DATHAK
	DCA%	X4
	TAD	DATHAK+1
	DCA%	X4
	TAD	DATHAK+2
	DCA%	X4
	TAD	CDFIDL
	SZA CLA
	JMP	SFIELD	/ALREADY DONE
	TAD	IDLAD	/FIELD OF IDLE ROUTINE
	JMS	MKCDF
	DCA	CDFIDL
	TAD	IDLAD+1	/ADDRESS OF #IDLE
	DCAZ	X4
CDFIDL,	0		/GETS CDF
	TAD	SKPINS	/SKP INSTRUCTION
	DCAZ%	X4	/STORE AT #IDLE
	TAD	JOB+1	/ADDRESS OF IDLE ROUTINE
	DCAZ%	X4	/STORE AT #IDLE+1
	TAD	JOB
	JMS	MKCDF
	IAC		/ CDF -> CIF CDF
	DCAZ%	X4	/STORE AT #IDLE+2
SFIELD,	CIF CDF
	JMP%	SET8

/
/ Blinky lights
/
SKPINS,
DOIT,	SKP		/ Entry point, one-time use constant
	TAD	ROTWRD	/GET WORD TO DISPLAY
STALL,	ISZ	COUNT
	JMP	STALL
	ISZ	COUNT2
	JMP	STALL
FLOP,	RAL		/Shift over
	DCA	ROTWRD	/Save it
	TAD	RESET	/Reset outer counter
	DCA	COUNT2
	SNL
	JMP	DONE
	TAD	ROTWRD
FLIP,	RAR		/Rotate back
	DCA	ROTWRD
	TAD	FLOP
	DCA	COUNT	/Save old rotate
	TAD	FLIP	/And flip 'em around
	DCA	FLOP
	TAD	COUNT
	DCA	FLIP
	DCA	COUNT
DONE,	TAD	SEEDPT
	JMS	MKCDF
	DCA	.+1
	0
	TAD	SEEDPT+1
	DCA	EXP
	CLL IAC
	TAD	EXP
	DCA	POINT
	TAD%	POINT
	TAD	K0100
	SPA
	JMP	OVRFLO
	DCA%	POINT
	JMP	DOIT+1

OVRFLO,	CLA CLL
	DCA%	POINT
	TAD%	EXP
	IAC
	AND	K0003
	DCA%	EXP
	JMP	DOIT+1
/ Change field number into CDF instruction
MKCDF,	0
	CLL RTL
	RAL		/INTO BITS 6-8
	TAD	SCDF	/CDF TO #IDLE
	JMP%	MKCDF

	END