home *** CD-ROM | disk | FTP | other *** search
- *\
- * :ts=8
- * Yet Another random number generator. By Leo Schwab.
- * Based on an idea posted on the USENET (Thanks, Sam Dicker!)
- * For the amiga assembler, Lattice linkage (32-bit arguments) (CS 8703.28)
- *
- * Calling convention:
- * short rnd (range);
- * short range;
- *
- * 8606.30
- */
-
- xdef _rnd
-
- section random,code
-
- _rnd lea rndseed,a0 Get address of seed
- move.l 4(sp),d1 Get range argument
- tst.l 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
-
- rndseed dc.l 0
-
- end
-