*\
*  :ts=8
* Yet Another random number generator.  By Leo Schwab.
* Based on an idea posted on the USENET (Thanks, Sam Dicker!)
* For the Manx assembler.
*
* Calling convention:
*  short rnd (range);
*  short range;
*
* 8606.30
*/

                public    _rnd

_rnd            lea     rndseed,a0      Get address of seed
                move.w  4(sp),d1        Get range argument
                tst.w   d1
                ble.s   setseed         Go reset seed


                move.l  (a0),d0         Get seed
                ADD.L   D0,D0
                BHI.S   over
                EORI.L  #$1D872B41,D0
over
                move.l  d0,(a0)         Save new seed
                andi.l  #$ffff,d0       Coerce into word
                divu    d1,d0           Divide by range
                swap    d0               and get remainder (modulus)
                rts

setseed         neg.w   d1              Probably don't need this
                move.l  d1,(a0)
                rts

                dseg
rndseed         dc.l    0
                cseg
