Compucolor.org – Virtual Media

Listing of file='RANDOM.MAC;01' on disk='vmedia/asm_utility_routines-sideA-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	RANDOM - RANDOM NUMBER GENERATOR
;
;	VALUES ON ENTRY:
;	   A  = RANGE OF NUMBERS
;
;	   THE RANDOM NUMBER SEED IS PUBLIC TO ALLOW
;	   EXTERNAL INITIALISATION.
;
;	RETURNS:
;	   A REG CONTAINS THE RESULTING NUMBER
;
;	DESTROYS:
;	   A REG
;

	ENTRY	RANDOM

	PUBLIC	RANPTR

RANDOM:	PUSH	B
	PUSH	H
	MOV	B,A	;MAX VALUE FOR RANDOM NUMBER
RAND1:	LHLD	RANPTR	;LAST RANDOM SEED
	MVI	C,8
RAND2:	MOV	A,H	;XOR BITS 3,12,14,15
	RRC
	XRA	H
	RRC
	RRC
	XRA	H
	RRC
	XRA	L
	RRC
	RRC
	RRC
	XRI	1
	ANI	1
	DAD	H
	ADD	L
	MOV	L,A
	DCR	C
	JNZ	RAND2
	SHLD	RANPTR	;SAVE SEED
	MOV	A,H
	ADD	L
	MOV	H,A	;SAVE GENERATOR
	MOV	A,B	;LIMIT
RAND3:	MOV	L,A	;SAVE LIMIT
	ADD	B
	CMP	B
	JNC	RAND3
	MOV	A,H
	CMP	L	;GREATER THAN LIMIT?
	JNC	RAND1	;YES, GENERATE ANOTHER ONE
RAND4:	CMP	B
	JC	RAND5
	SUB	B
	JMP	RAND4
RAND5:	POP	H
	POP	B
	RET

RANPTR:	DS	2	;SEED FOR RANDOM NUMBERS

	END