Вектор-06Ц/Генератор случайных чисел

Материал из Emuverse
Версия от 13:36, 28 сентября 2022; Nzeemin (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

(Права на описание — Emuverse, права на фрагменты кода — см. в шапке фрагмента.)

8-битный

https://zx-pk.ru/threads/34480-programmirovanie.html?p=1160254&viewfull=1#post1160254

; by parallelno
Random:
@mainCodeAddr:
			lxi h, $100
@rnd:
			sbi 1
			rrc
			xra m
			cma
			inr l
			sbb m
			shld @mainCodeAddr+1
			sta @rnd+1				; 84
			ret

Взято из кода Highway Encounter:
https://zx-pk.ru/threads/34480-programmirovanie.html?p=1160258&viewfull=1#post1160258

; Псевдослучайное 8-битное число с периодом 256 по отношению: X[1] = X[0] * 5 + 7
; I: -
; O: A=RND
; M: HL, AF
Rand:		lxi	h,RndVal
		mov	a,m
		add	a
		add	a
		add	m
		adi	7
		mov	m,a
		ret

LFSR 16-битный

https://zx-pk.ru/threads/21907-demo-effekty-dlya-vektora.html?p=930543&viewfull=1#post930543

; by ivagor
rnd16:
	lxi h,65535
	dad h
	shld rnd16+1
	rnc
	mvi a,00000001b ; flipped 80h - 10000000b
	xra l
	mov l,a
	mvi a,01101000b	; flipped 16h - 00010110b
	xra h
	mov h,a
	shld rnd16+1
	ret

LFSR/LCG 16-битный

https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Random#Combined_LFSR.2FLCG.2C_16-bit_seeds
https://zx-pk.ru/threads/32499-portirovanie-desolate-na-vektor-06ts.html?p=1091958&viewfull=1#post1091958

Random16:
    ld hl,(seed1)
    ld b,h
    ld c,l
    add hl,hl
    add hl,hl
    inc l
    add hl,bc
    ld (seed1),hl
    ld hl,(seed2)
    add hl,hl
    sbc a,a
    and %00101101
    xor l
    ld l,a
    ld (seed2),hl
    add hl,bc
    ret
seed1: dw 12345
seed2: dw 54321