			RND1

00100 ; RANDOM

00110 ; 4/7/86          J. DUNMYER

00120 ; CREATES A RANDOM NUMBER, USING A KEYPRESS

00130 ; TO REFRESH THE RANDOM NUMBER SEED.

00140 ; STORES THE BINARY RANDOM NUMBER

00150 ; CONVERTS THAT NUMBER TO ITS DECIMAL EQUIVALENT

00160 ; AND DISPLAYS IT

00170 ;

00180 ;

00190 ;

00200 CLS			EQU		01C9H

00210 OUTC		EQU		0033H

00220 CHKIO		EQU		002BH

00230 RANDOM		EQU		01D3H

00240 RND			EQU		14CCH

00250 CINT		EQU		0A7FH

00260 DISPLY		EQU		021BH

00270 CURSOR		EQU		4020H

00280 TODOS		EQU		402DH

00290 ;

00300 ;

00310 			ORG		7000H

00320 START		CALL		CLS

00330 			LD		IX,DECNO	;PUT RND NO. STG IN IX

00340 			LD		HL,RNOS	;GET RND NO STG. ADDRESS

00350 			PUSH		HL		;SAVE IT

00360 LOOP		LD		HL,INTRO	;GET MESSAGE PROMPT

00370 			CALL		DISPLY	;DISPLAY IT

00380 GETDIG		CALL		CHKIO	;WAIT FOR KEY PRESS
00390 			JP		Z,GETDIG	

00400 			CALL		RANDOM	;GET RANDOM # SEED

00410 RNDN		LD		HL,999	;SET UPPER RANDOM NO. LIMIT

00420 			PUSH 	DE		;SAVE DE REG.

00430 			PUSH		BC		;SAVE BC REG

00440 			CALL		RND		;GET RANDOM NO BETWEEN 1 & 9

00445 			CALL		CINT		;CONVERT TO INTEGER

00450 			POP		BC		;GET BC REG BACK

00460 			POP		DE		;GET DE REG BACK

00470 			EX		DE,HL	;MOVE NO TO DE

00480 			POP		HL		;GET RND # BUFFER IN HL

00490 			LD		(HL),E	;LSB IN RND. NO BUFFER

00500 			INC		HL		;ADDRESS & BUMP POINTER

00510 			LD		(HL),D	;MSB IN RND. NO BUFFER

00520 			INC		HL		;BUMP POINTER

00530 			PUSH 	HL		;SAVE IT AGAIN

00540 			EX		DE,HL	;GET RAND NO IN HL AGAIN

00550 			CALL		CONV		;CONVERT TO DECIMAL(ASCII)

00560 			LD		DE,3DC0H	;LOAD SCREEN ADDR IN DE

00570 			LD		HL,DECNO	;PUT DEC LOCN IN HL

00580 DECD		LD		A,(HL)	;PUT IN ACCUM

00590 			CALL		OUTC		;DISPLAY IT

00600 			INC		HL		;BUMP POINTER

00610 			LD		A,(HL)	;

00620 			CP		0DH		;DONE?

00630 			JR		NZ,DECD	;CONTINUE DISPLAYING NO.

00640 			JP		TODOS	;DONE

00650 CONV		LD		IY,PTABLE	;POWER OF 10 TABLE IN IY

00660 			PUSH		BC		;SAVE COUNT

00670 BIN010		XOR		A		;DIGIT COUNT TO ZERO

00680 			LD		D,(IY+1)	;MSB TO TO D

00690 			LD		E,(IY+0)	;LSB TO E

00700 BIN020		OR		A		;CLEAR CARRY

00710 			SBC		HL,DE	;SUBTRACT POWER OF 10

00720 			JR		C,BIN030	;GO IF NEGATIVE

00730 			INC		A		;BUMP DIGIT COUNT

00740 			JR		BIN020	;CONTINUE

00750 BIN030		ADD		HL,DE	;RESTORE TO POSITIVE

00760 			ADD		A,30H	;CONVERT TO ASCII

00770 			LD		(IX+0),A	;STORE IN BUFFER

00780 			INC		IX		;BUMP BUF POINTER

00790 			INC		IY		;BUMP PWR10 POINTER

00800 			INC		IY

00810 			LD		A,E		;GET LS	BYTE

00820 			CP		1		;TEST FOR 5 DIGITS

00830 			JR		NZ,BIN010	;GO IF NOT 5

00840 			LD		A,0DH	;END STRING

00850 			LD		(IX+0),A	;SAVE IT

00860 			INC		IX		;BUMP POINTER

00870 			POP		BC		;RESTORE COUNT

00880 			RET			;RETURN

00890 INTRO		DEFM		'PRESS ANY KEY TO GENERATE RANDOM NO.'

00900 			DEFB		0DH

00910 RVAL		DEFW		0

00920 RNOS		DEFS		20

00930 DECNO		DEFS		60

00940 PTABLE		DEFW		10000

00950 			DEFW		1000

00960 			DEFW		100

00970 			DEFW		10

00980 			DEFW		1

00990 			END		START
                                                                                                                                                                                                                                 