HispaMSX

Dudas assembler "The elemmental, dear Watson"

2005-03-10 13:36:43

Hola de nuevo,

Pues sí que va bien la cosa, ayer mismo empiezo a usar algo más que 
llamadas a las rutinas 4ah y 4dh de la BIOS y ya estoy con problemas 
hasta el cuello :)

Gracias a los que se tomaron con sentido del humor mi mensaje, jejeje, 
prometo seguir y sobre todo hacer juegos como churros (ahí queda eso :
))

El primer escollo es la detección de choques.

En Basic, más o menos haría así (no sé si es muy elegante):

x1,x2=coord. x de los sprites 1 y 2 (16x16)
y1,y2=coord. y de los sprites 1 y 2

if abs(x1-x2)<16 and abs(y1-y2)<16 then hostiazo padre

Pero en asm, una vez tengo en D la coordenada x del 1ºsprite, y en el 
acumulador acabo de leer la del segundo:

LD HL,6913
CALL 4ah
LD D,A

LD HL,6945
CALL 4ah

SUB D
CP 16
JP M, hostiazo

Bueno, habría que comparar las coord y también, pero pongo sólo la x 
para abreviar.

El caso es que funciona bien siempre y cuando x1<x2, pues si la coord.
x del sprite 1 es mayor que la del 2, entonces la cosa se desmadra y 
chocan a una gran distancia. Supongo que tendrá algo que ver el hecho 
de que si x2>x1 entonces la resta de negativo, y ahí igual se jode la 
cosa. Pero por más que miro en el librillo que tengo, no encuentro 
cómo arreglarlo. Además, ¿cómo hacer como en basic la función abs(x) e 
ignoro el signo?

Otra cosa es que no entendí muy bien si se puede hacer en asm algo 
como:

if a<5 then...

o

if a>5 then...

Vamos, se comparar igualdades, pero ¿cómo se hace para ver si es mayor 
o menor que un valor?

Ayyy, siento estas preguntas y no debería hacerlas, pero es que llevo 
toda la mañana con el libro y no saco nada en claro, y ayer acabé 
abatido :(

Un saludo y gracias,

Juanma







<Anterior en la conversación] Conversación actual [Siguiente en la conversación>