Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: burguera en 29 de Diciembre de 2010, 08:09:23 pm



Título: SBC y el Carry
Publicado por: burguera en 29 de Diciembre de 2010, 08:09:23 pm
Buenas!

Estaba programando unas cosillas y me he encontrado con un problemilla curioso. Seguramente soy yo que meto la gamba, pero no sé exactamente por qué. Os cuento. Tengo un fragmento de código tal que este:
Código:
ld hl, (MAPX)
ld (PARAMS), hl
ld bc, 0
sbc hl, bc
jr c, .CHY

En general funciona bien, pero algo falla cuando (MAPX) vale cero. Igual falla en otros casos, pero en lo que estoy haciendo sólo he detectado el problema en esa situación.

Si (MAPX) vale cero, en realidad sbc hace "0 menos 0". El caso es que a veces tras la operación el carry se pone a uno y otras se pone a cero sin ninguna razón aparente. No lo he probado en un MSX real, pero el fallo aparece tanto en el blueMSX como en el Meisei.

¿Alguna idea de por qué pasa esto?

Y, ya que estamos: ¿hay alguna forma mejor que un SBC y mirar el carry para comparar dos números de 16 bits?

Saludos!
---
Toni


Título: Re: SBC y el Carry
Publicado por: MsxKun en 29 de Diciembre de 2010, 08:31:57 pm
Asi a primera vista... Resetea el flag antes de nada por si las moscas.

Para comparar HL y DE tienes:

RST $20    ; compara HL y DE (Set Z si HL=DE - Set Carry si HL<DE)

Hasta :)


Título: Re: SBC y el Carry
Publicado por: e_sedes en 29 de Diciembre de 2010, 09:26:29 pm
SBC tiene en cuenta el estado de C, si no lo tienes controlado te puede fallar.


Título: Re: SBC y el Carry
Publicado por: OKI09 en 29 de Diciembre de 2010, 09:41:20 pm
Cierto, la rutina de la BIOS $20 compara HL-DE y funciona a la perfeccion, lo se porque la utilizo en un algo que estoy haciendo. ;D


Título: Re: SBC y el Carry
Publicado por: burguera en 29 de Diciembre de 2010, 09:46:20 pm
Gracias a todos!

Probaré con la 20h, aunque ya lo he solucionado reseteando el carry antes del SBC. Dios... si es un perro me muerde, si ya lo dice la propia instrucción SuBstract with Carry. Estoy tonto  ::)

Sólo lo había notado en el caso de restar 0 y 0 porque ahí el bit de carry si que marca la diferencia entre positivo y negativo, pero en el resto de casos también podía pasar.

Saludos!
Toni


Título: Re: SBC y el Carry
Publicado por: burguera en 29 de Diciembre de 2010, 11:02:56 pm
Cierto, la rutina de la BIOS $20 compara HL-DE y funciona a la perfeccion, lo se porque la utilizo en un algo que estoy haciendo. ;D

Por cierto, ¿en qué estás metido, si se puede confesar? ¿algo para la dev quizá?



Título: Re: SBC y el Carry
Publicado por: Imanok en 30 de Diciembre de 2010, 09:39:18 am
Buenas!

Estaba programando unas cosillas y me he encontrado con un problemilla curioso.
Mola ver que te has puesto a hacer cositas de nuevo... mucho ánimo!  ;)


Título: Re: SBC y el Carry
Publicado por: OKI09 en 30 de Diciembre de 2010, 12:29:02 pm
Citar
Por cierto, ¿en qué estás metido, si se puede confesar? ¿algo para la dev quizá?

Nop, para la DEV no.
Paciencia, aunque ya esta muy avanzado, no dispongo de mucho tiempo. Pronto os dire algo a todos, aunque algunos ya han visto algo.;)