09e27bac54
Co-authored-by: Lua MacDougall <lua@foxgirl.dev>
41 lines
659 B
NASM
41 lines
659 B
NASM
; random number generation routines
|
|
; by lua :3 - 2022 https://foxgirl.dev/
|
|
|
|
const RANDOM_STATE: 0x0228218E ; 4 bytes
|
|
|
|
; generate a random number
|
|
; inputs:
|
|
; none
|
|
; outputs:
|
|
; r0: random number
|
|
random:
|
|
push r1
|
|
mov r0, [RANDOM_STATE]
|
|
|
|
mov r1, r0
|
|
sla r1, 13
|
|
xor r0, r1
|
|
mov r1, r0
|
|
srl r1, 17
|
|
xor r0, r1
|
|
mov r1, r0
|
|
sla r1, 5
|
|
xor r0, r1
|
|
|
|
mov [RANDOM_STATE], r0
|
|
pop r1
|
|
ret
|
|
|
|
; generate a random number in the range [r1, r2)
|
|
; inputs:
|
|
; r1: minimum value, inclusive
|
|
; r2: maximum value, exclusive
|
|
; outputs:
|
|
; r0: random number
|
|
random_range:
|
|
call random
|
|
sub r2, r1
|
|
rem r0, r2
|
|
add r0, r1
|
|
ret
|