GetRandomNumber: ; Uses a 16-bit RAM variable called RandomNumberGeneratorWord ; Returns an 8-bit pseudo-random number in a push hl ld hl,(RandomNumberGeneratorWord) ld a,h ; get high byte rrca ; rotate right by 2 rrca xor h ; xor with original rrca ; rotate right by 1 xor l ; xor with low byte rrca ; rotate right by 4 rrca rrca rrca xor l ; xor again rra ; rotate right by 1 through carry adc hl,hl ; add RandomNumberGeneratorWord to itself jr nz,+ ld hl,$733c ; if last xor resulted in zero then re-seed random number generator +: ld a,r ; r = refresh register = semi-random number xor l ; xor with l which is fairly random ld (RandomNumberGeneratorWord),hl pop hl ret ; return random number in a