;
; PROGRAM: SYSTEST5
; AUTHOR: Richard Conn
; PURPOSE: This program obtains a seed value and then generates
; 10 random numbers
;
;
; Externals
;
ext cin ; char in
ext cout ; char out
ext print ; print string
ext rndinit ; init random number generator by keypress
ext rnd ; return random number
ext rndseed ; init random number generator by user seed
ext crlf ; new line
ext padc ; print A as up to 3 decimal digits
ext caps ; capitalize char
ext bbline ; get line from user
ext eval ; evaulate string
;
; Constants
;
cr equ 0dh
lf equ 0ah
call print
db 'SYSTEST5 - Random Number Demo',0
;
; Start of main loop, which generates 10 random numbers each time it is
; executed.
;
start:
;
; Prompt user to see if he wants to select his own seed
;
call print
db cr,lf,'Do you want to pick your own seed (Y/N)? ',0
call cin ; get single-char response from user
call caps
call cout
cpi 'N'
jz rseed
;
; Input a seed value from the user.
;
call print
db cr,lf,'What is your seed value? ',0
xra a ; no caps
call bbline ; get string
call eval ; evaluate string and return value in HL and A=L
call rndseed ; set seed from 8-bit value in A
call print ; print seed stored
db cr,lf,'Your seed is: ',0
call padc
jmp rseed1
;
; Prompt user and wait for keypress to set seed.
;
rseed:
call print
db cr,lf,'Wait a little and then press a key to set the seed - ',0
call rndinit
;
; Generate 10 random numbers
;
rseed1:
call print
db cr,lf,'10 Random Numbers follow --',cr,lf,0
mvi b,10 ; 10 numbers
loop:
call rnd ; get number
call padc ; print it as decimal
mvi a,' ' ; print <SP>
call cout
dcr b ; count down
jnz loop
;
; Prompt user to continue
;
call print
db cr,lf,'Do you want to run this test again (Y/N)? ',0
call cin ; get response
call caps
call cout
cpi 'N'
jnz start
ret ; return to OS if done