Y después de la manita que te ha echado WYZ, aquí viene otra más:
Para generar números aleatorios, la forma basta de hacerlo es con el
registro R (registro de refresco de memoria del Z80), que se autoincrementa
automáticamente. Eso sí, el problema es que no es muy aleatorio y que sólo
varían los 7 bits más bajos (el bit alto se mantiene siempre igual, sea 1 o
0, según lo pongas tu).
Entonces, te recomiendo que uses una tabla y ya está, todo solucionado:
INIT_RANDOM:
; Esta la tienes que ejecutar al principio de tu programa, sólo una vez
xor a
ld r,a
ret
RANDOM:
; Rutina que devuelve un número de 8 bits pseudoaleatorio en el acumulador
(A)
ld a,r
ld c,a
ld b,0
ld hl,RND_TABLE
add hl,bc
ld a,[hl]
ret
RND_TABLE:
db ......
En la tabla tienes que poner 128 valores aleatorios. Mira por ejemplo el
código fuente del MINESWEEPER que va con el asMSX, porque utiliza una rutina
muy parecida y una tabla de números aleatorios generada en un lenguaje de
alto nivel. El asMSX en el que estoy trabajando ya soporta la generación de
números aleatorios, pero queda algo de tiempo para que sea publicado, claro.
Espero que con esto puedas avanzar un poco más, Juanma.
Un saludo y ánimo!
Edu Robsy
Nas:
-detección en screen 1 del carácter que está pisando un sprite.
Puede que esta te sirva.
IN: [B]=X [00-FF]
[C]=Y [00-BF]
OUT:[HL]=DIRECCION VRAM
VPEEKXY: LD HL,$1800 ;SI NO SE HA VARIADO
LD D,0
LD A,C ;HL=HL+(Y\8)*32
AND 11111000B
LD E,A
ADD HL,DE
ADD HL,DE
ADD HL,DE
ADD HL,DE
LD A,B ;HL=HL+(X\8)
SRL A
SRL A
SRL A
LD E,A
ADD HL,DE
LD A,L ;A=VPEEK(HL)
OUT [$99],A
LD A,H
OUT [$99],A
IN A,[$98]
RET
utiliza varios puntos del sprite segun la forma que tenga ( por ejemplo las
cuatro esquinas) y compruebas que caracteres "pisa".
No esta probado, pero creo que funciona. Ademas seguro que eres capaz de
mejorarla. Animo!
WYZ
PS: El ensamblador es como la quimica. Utilizas siempre un numero
determinado de elementos simples con los que organizandolos segun unas
reglas puedes construirlo todo.
Darth Fistro <idrisbenali(_en_)yahoo(_punto_)es> wrote:
Hola a todos :)
Antes de empezar, desearía desde aquí acusar públicamente a ciertos
elementos de este foro (ellos bien saben quiénes son). Este grupúsculo
es el culpable de que esté a estas horas aún pegado peleándome con
cierta rutina, y de que haya perdido mi vida social. Era un feliz
programador de basic hasta que estos bellacos facinerosos empezaron
con las recomendaciones "pásate al ensamblador", "el ensamblador es
vida"... y yo como un imbécil piqué y probé, y ahora estoy enganchado.
.. me paso todo el día, hasta en el supermercado, pensando una nueva
rutina, si puedo hacer tal o cual cosa y si el nemónico que tengo en
mente realmente existe... gracias a todos ellos, nunca pensé que esto
enganchase tanto :)
-detección en screen 1 del carácter que está pisando un sprite. Este
lo considero fundamental para mis aspiraciones
---------------------------------
[Se han eliminado los trozos de este mensaje que no contenían texto]
*HispaMSX. La mailing-list de MSX en castellano*
Para cualquier duda: hispamsx-owner(_en_)yahoogroups(_punto_)com
Web de lista: http://www.hispamsx.org
Enlaces a Yahoo! Grupos
hispamsx-unsubscribe(_en_)yahoogroups(_punto_)com
http://es.docs.yahoo.com/info/utos.html