Compucolor.org – Virtual Media

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	UTILITY ROUTINES
;
;
;	DELAY - TIME DELAY ROUTINE
;
;	   SIMPLE TIMING LOOP.
;
	ENTRY	DELAY

;
;	VALUES ON ENTRY:
;	   A  = NUMBER OF LOOPS - 100 ITERATIONS PER LOOP
;
;	DESTROYS:
;	   NOTHING
;


DELAY:	PUSH	B	;SAVE REGISTER
	MOV	C,A
DEL1:	MVI	B,100	;DO INNER LOOP 100 TIMES
DEL2:	DCR	B
	JNZ	DEL2
	DCR	C
	JNZ	DEL1	;OUTER LOOP
	POP	B
	RET

;..............................................................
;
;	RANDOM - RANDOM NUMBER GENERATOR
;
;	   THE RANDOM NUMBER SEED IS PUBLIC TO ALLOW
;	   EXTERNAL INITIALISATION.
;

	ENTRY	RANDOM

	PUBLIC	RANPTR	;SEED FOR RANDOM NUMBERS

;
;	VALUES ON ENTRY:
;	   A  = RANGE OF NUMBERS
;
;	RETURNS:
;	   A REG CONTAINS THE RESULTING NUMBER
;
;	DESTROYS:
;	   ONLY A REG
;

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

	END