;random/asm
	ORG	7000H
ENTRY	LD	HL,MESSAGE
	CALL	4467H
	LD	B,3
	LD	HL,BUFFER
	CALL	40H
	JP	C,402DH
	CALL	VALUE
	JR	C,ENTRY
	LD	A,C
	OR	A
	JR	Z,ENTRY
	CP	1
	JR	Z,ENTRY
	PUSH	BC
	LD	HL,RANMSG
	CALL	4467H
	LD	A,C
	CALL	ASCII
	CALL	33H
	LD	A,C
	CALL	33H
	LD	A,B
	CALL	33H
	LD	A,10
	CALL	33H
	POP	BC
LOOP	LD	A,(3840H)
	BIT	7,A
	JR	NZ,LOOP
	CALL	RANDOM	;get random number
	CALL	SHOWIT
	CALL	2BH	;get a key
	CP	1	;break?
	JR	NZ,LOOP
	JR	ENTRY	;restart
VALUE	LD	BC,0	;start value
VALLP	LD	A,(HL)	;get a character
	CP	13	;done?
	RET	Z
	INC	HL	;bump pointer
	SUB	30H
	RET	C
	CP	10
	CCF
	RET	C
	PUSH	HL
	LD	H,B
	LD	L,C
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,BC
	ADD	HL,HL
	LD	C,A
	LD	B,0
	ADD	HL,BC
	LD	B,H
	LD	C,L
	POP	HL
	JR	VALLP
SHOWIT	PUSH	BC
	LD	A,B
	CALL	ASCII
	CALL	33H
	LD	A,C
	CALL	33H
	LD	A,B
	CALL	33H
	LD	A,20H
	CALL	33H
	CALL	33H
	CALL	33H
	CALL	33H
	CALL	33H
	POP	BC
	RET
;
; actual RANDOM code
;
RANDOM	LD	A,R
RAND0	XOR	37H
RAND1	EQU	$-1
	LD	(RAND3),A
	RRCA
	RRCA
	XOR	2FH
RAND2	EQU	$-1
	LD	(RAND1),A
	RLA
	XOR	77H
RAND3	EQU	$-1
	LD	(RAND2),A
RAND4	LD	B,A
	CP	C
	RET	C
	RRA
	JR	RAND0
;
;
ASCII	LD	B,'0'
ASC1	SUB	100
	JR	C,ASC2
	INC	B
	JR	ASC1
ASC2	ADD	A,100
	PUSH	BC
	LD	C,'0'
ASC3	SUB	10
	JR	C,ASC4
	INC	C
	JR	ASC3
ASC4	ADD	A,3AH
	LD	B,A
	POP	AF
	RET
MESSAGE	DB	10,'Enter Random Number Limit (2-255): ',3
RANMSG	DB	'Maximum Random Number = ',3
BUFFER	DS	10
	END	ENTRY
