;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; Random Number Generator   # 01    Tylisha C. Andersen
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

; General-purpose random number generator.
; Uses a 'Linear feedback shift register'.
; Note: won't work if the seed is zero.
;   Assumes ds = cs
;   Returns eax = result

Proc        rand

            push  cx
            mov   eax, [seed]
            mov   cx, 33

rloop:      add   eax, eax
            jnc   $+4
            xor   al, 197
            loop  rloop

            mov   [seed], eax

            pop   cx
            ret

seed        dd    1

EndP        rand

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; Random Number Generator   # 02    Mikko Hyvarinen
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

random  proc
        imul eax,[seed],1107030247
        add eax,97177
        mov [seed],eax
        shr eax,15
        ret
seed    dd 0
random  endp
