From: Sidney Cadot (sidney_at_janis.pds.twi.tudelft.nl)
Date: 2000-03-17 00:31:03
Hi all, I propose to replace the lib/rand.s code with the following: ===================== SNIPPET: lib/rand.s ; int rand (void); ; void srand (unsigned seed); ; Uses 4-byte state. ; Multiplier must be 1 (mod 4) ; Added value must be 1 (mod 2) ; This guarantees max. period (2**32) ; Bits 8-22 are returned (positive 2-byte int) ; where 0 is LSB, 31 is MSB. ; This is better as lower bits exhibit easily ; detectable patterns. .export _rand, _srand .bss rand: .word 0 ; LSW of seed .word 0 ; MSW of seed .code _rand: clc lda rand+0 ; SEED *= $01010101 adc rand+1 sta rand+1 adc rand+2 sta rand+2 adc rand+3 sta rand+3 clc lda rand+0 ; SEED += $31415927 adc #$27 sta rand+0 lda rand+1 adc #$59 sta rand+1 pha lda rand+2 adc #$41 sta rand+2 and #$7f tax lda rand+3 adc #$31 sta rand+3 pla ; return bit 8-22 in (X,A) rts _srand: sta rand+0 ; Store the seed stx rand+1 lda #0 sta rand+2 ; Set MSW to zero sta rand+3 rts ===================== END OF SNIPPET This is a period 2^32 random generator (for any seed value), with quite nice pseudo-random properties even in the low bits. It is slightly bigger and slower than the generator in use now, but its behaviour is a lot better. Code is donated to the project; Ullrich may add a copyright notice as he sees fit. Best regards, Sidney +--------------------------------------------------------------------------+ | -- Sidney Cadot - sidney_at_ch.twi.tudelft.nl - ITS/TU Delft - tst. 3850 -- | +--------------------------------------------------------------------------+ |/* C-code to calculate day-of-week (1901-2099). Type name for man page. */| |main(int c,char**v){exit(printf("%sday.\n","Use MM/DD/YYYY argument to c" | |"alculate week\0Mon\0/0/Tues\0/0Wednes\0Thurs\0/Fri\0/0/Satur\0/Sun"+(*++ | |v?42+((5*atoi(6+*v)+"@GSTDLXDP_at_HT@"[atoi(*v)])/4+atoi(3+*v))%7*7:0))/30);}| +--------------------------------------------------------------------------+ ---------------------------------------------------------------------- To unsubscribe from the list send mail to majordomo_at_musoftware.de with the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2001-12-14 22:05:35 CET