Z80 8 bit PRNG. By Lee Davison. |
This is a short peice of code that generates a maximal length, 8 bit, pseudo random number sequence. It was originally used to switch off and on all the LED's in a 8x30 matrix in a good random looking order (the un-needed values being skipped).
It's shorter, but slower, than using a lookup table and a counter.
; returns pseudo random 8 bit number in A. Only affects A. ; (r_seed) is the byte from which the number is generated and MUST be ; initialised to a non zero value or this function will always return ; zero. Also r_seed must be in RAM, you can see why...... rand_8: LD A,(r_seed) ; get seed AND #B8h ; mask non feedback bits SCF ; set carry JP PO,no_clr ; skip clear if odd CCF ; complement carry (clear it) no_clr: LD A,(r_seed) ; get seed back RLA ; rotate carry into byte LD (r_seed),A ; save back for next prn RET ; done r_seed: DB 1 ; prng seed byte (must not be zero)The 6502 8 bit version can be found here and the 32 bit 68k version can be found here.
Last page update: 28th August, 2003. | e-mail me |