1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-12-23 23:30:22 +00:00
millfork/include/i80/random_i80.mfk

47 lines
651 B
Plaintext

import random
#if not(ARCH_I80)
#warn stdlib_i80 module should be only used on Intel 8080-like targets
#endif
#pragma zilog_syntax
asm byte rand() {
ld b,8
ld hl,(rand_seed)
__rand_loop:
add hl,hl
? jp nc, __no_eor
ld a,l
xor $2D
ld l,a
__no_eor:
#if CPUFEATURE_Z80
djnz __rand_loop
#else
dec b
? jp nz, __rand_loop
#endif
ld (rand_seed),hl
? ret
}
#if CPUFEATURE_Z80
inline asm void init_rand_seed() {
ld a,r
ld (rand_seed), a
ld a,r
ld (rand_seed+1), a
? ret
}
#else
inline void init_rand_seed() {
// TODO: find a better source of randomness
rand_seed = 1
}
#endif