HispaMSX

RE: Dudas assembler "The elemmental, dear Watson"

2005-03-10 16:57:50


Buenas, hay van algunas respuestas que creo pueden ser adecuadas:
 
    Tienes varias soluciones para lo de la colisión:
            - antes de hacer esa resta comprueba cual de las dos 
coordenadas
(que llamaremos x1 y x2) es mayor y después haz la resta ya de la 
forma
correcta para que no te de signo negativo

Gracias a tí también, Dani. Justo después de escribir el mensaje se me 
ocurrió probar eso. Me he hecho con el RSC, he estado probando y 
averiguando los comandos de uso hasta que he podido ensamblar algo 
(antes metía todo a mano y muchos errores venían precisamente de ahí). 
Pero no he conseguido avanzar mucho. Voy a seguir probando :(


            - también puedes, una vez hecha la resta, calcular el 
valor
absoluto del resultado. Dado que este viene dado en complemento a 2 
si es
negativo (o eso creo, nunca lo comprobé en el Z80!!) deberás mirar 
el bit de
signo (el de más a la izquierda del todo) y en caso de ser un 1 (es 
decir,
nº negativo), pues tendrás que calcular el complemento a 2 de dicho 
valor:
                                    BIT 7,A    //suponiendo en A el
resultado de la resta
                                    JR NZ, positivo   //como Flag Z 
== 0 -->
signo 0 = positivo
                                    NEG    //calcula complemento a 2 
de A,
es decir, lo pone en positivo
                        positivo: ...
                 Tambien, si no me equivoco y dado que el valor de A 
en tu
caso viene de hacer una resta (SUB) pues dicha instrucción afecta al 
flag de
signo, por lo que puedes usar JP P, etiqueta de la siguiente forma:
                                    JP P, positivo
                                    NEG
                        positivo: .....
Lo malo es que el JP ocupa más que el JR (aunque te ahorras el BIT). 
Bueno,
eso como tu veas.

Gracias muchas, ya veo que tengo nuevos caminos de exploración, jejeje 
:)


 
            De todos modos, yo te aconsejo que la colisión entre 
objetos,
por lo menos como primera aproximación, la hagas considerando 
intersección
entre rectángulos 

El código basic que incluí iba por esos derroteros. A ver si por lo 
menos soy capaz de que detecte eso, ya ni hablemos colisiones bit a 
bit :)



         
¡Uff menuda chapa que te acabo de meter!. No sé si te habrá servido 
de algo,
si no entiendes, vuelve a preguntar que cualquiera de los sabios de 
este
foro te va a responder ;-) Y de nuevo disculpar mis errores porque 
casi no
hice nada en este ensamblador y lo tengo muy verde

Para decir que no sabes mucho de Z80, te has marcado un buen esfuerzo 
en responder, y eso te lo agradezco muchísimo. Es que estoy como loco 
porque alguien me de una idea para seguir avanzando, no vaya a ser que 
al final me arrepienta y vuelva al BASIC, jejejejeje :)

Un saludete,

Juanma




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