;
;  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

       end