Ayuda en CM

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Avatar de Usuario
sejuan
64 bits
64 bits
Mensajes: 866
Registrado: 15 Jun 2006 16:44
Ubicación: Amarion
Contactar:

Ayuda en CM

Mensaje por sejuan »

Hola gente:

Perdonad si el hilo no correspondiera con el foro pero no sé muy bien donde dirigir esta pregunta. Y como sé que aquí hay peña que el ensamblador es como su segunda lengua pues eso, hay va la pregunta:

Es muy dificil realizar una rutina de calculo aleatorio? Haber me explico, algo así como el RND en basic o parecido. Que se delimite los limites y sobre el resultado se realice una u otra cosa.
No sé si me explico.

Saludos y perdonad de nuevo. Gracias.

sejuan
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Un googleciño rápido me ha llevao a este peaso de página en la cual hay MUCHAS rutinas útiles: http://map.tni.nl/sources/external/z80bits.html

En concreto la que tú quieres:

Código: Seleccionar todo

3 Random Number Generators
3.1 8-bit Random Number Generator

This is a very simple linear congruential generator. The formula is x[i + 1] = (5 * x[i] + 1) mod 256. Its only advantage is small size and simplicity. Due to nature of such generators only a couple of higher bits should be considered random. 

Input: none
Output: A = pseudo-random number, period 256 

Rand8	ld	a,Seed		; Seed is usually 0
	ld	b,a
	add	a,a
	add	a,a
	add	a,b
	inc	a		; another possibility is ADD A,7
	ld	(Rand8+1),a
	ret
3.2 16-bit Random Number Generator

This generator is based on similar method but gives much better results. It was taken from an old ZX Spectrum game and slightly optimised. 

Input: none
Output: HL = pseudo-random number, period 65536 
Rand16	ld	de,Seed		; Seed is usually 0
	ld	a,d
	ld	h,e
	ld	l,253
	or	a
	sbc	hl,de
	sbc	a,0
	sbc	hl,de
	ld	d,0
	sbc	a,d
	ld	e,a
	sbc	hl,de
	jr	nc,Rand
	inc	hl
Rand	ld	(Rand16+1),hl
	ret
Avatar de Usuario
sejuan
64 bits
64 bits
Mensajes: 866
Registrado: 15 Jun 2006 16:44
Ubicación: Amarion
Contactar:

Mensaje por sejuan »

na_th_an escribió:Un googleciño rápido me ha llevao a este peaso de página en la cual hay MUCHAS rutinas útiles: http://map.tni.nl/sources/external/z80bits.html

Muchisimas gracias na_th_an voy a probarlas ahora mismo.
:wink:

Un abrazo.


sejuan
nonamed

Mensaje por nonamed »

para obtener un número aleatorio entre 0 y 255 simplemente tienes que leer el valor del registro R.

ld a, r nos metería en A un valor "aleatorio" entre 0 y 255.

Pongo entre comillas lo de aleatorio, porque si lo utilizas en intervalos exactos de tiempo, pierde un poco su aletoriedad, pero vamos, para el 90% de los usos en juegos vale
Responder