*\ * :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