Mercurial > hg > Members > kono > nitros9-code
view lib/alib/rnd.a @ 2765:0bd16cca86b7
Updated rules.mak for all the os9 format's to format the entire disk. People were having some issues with the disk images not being formatted to their full capacity and preventing some functions from working.
author | drencor-xeen |
---|---|
date | Thu, 17 Jan 2013 11:03:26 -0600 |
parents | 7d70b7e1cb21 |
children | aaba193af04f |
line wrap: on
line source
*************************************** * Subroutine to calc. a random number * Based on routine by L.A. Middaugh * The Rainbow Jan/85 p. 277 * Value truncated so that it is =>0 and <=passed value in D. * OTHER MODULES NEEDED: none * ENTRY: D=max value of number to be returned * EXIT: D = value nam Rnd ttl Assembler Library Module psect Rnd,0,0,0,0,0 vsect dp SEED rmb 4 endsect RND: pshs d,x,u rnd0 ldx #SEED point to seed ldb #8 number of shifts loop lda 3,x exclusive or bit 28 with 31 rora rora rora eora 3,x rora result in carry rora ror 0,x rotate carry into bit0 ror 1,x ror 2,x ror 3,x decb do 8 times bne loop ldd 1,x get rnd value bne trunc ensure we never return a 0 inc 1,x fudge it so we get a non-zero inc 3,x bra rnd0 trunc cmpd ,s in range specified? bls exit yes subd ,s bra trunc exit leas 2,s forget original D puls x,u,pc ********************************************** * * Subroutine to seed the random number buffer * with the current system date * ENTRY: none * EXIT: none SEEDRND: pshs d,x leas -6,s make room for date tfr s,x point X to buffer os9 F$Time addd 4,x add min/secs to value in D addd <SEED add to orig value std <SEED set msb of seed addd <SEED+2 add lsb of seed to new msb std <SEED+2 leas 6,s puls d,x,pc endsect