Karoshi MSX Community
05 de Julio de 2021, 11:59:44 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: SBC y el Carry  (Leído 3765 veces)
0 Usuarios y 1 Visitante están viendo este tema.
burguera
Visitante
« : 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
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #1 : 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 Smiley
En línea

--

Cindy Lauper She Bops!
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #2 : 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.
En línea

sempre fun un valente corredor
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #3 : 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. Grin
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
burguera
Visitante
« Respuesta #4 : 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  Roll Eyes

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
En línea
burguera
Visitante
« Respuesta #5 : 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. Grin

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

En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #6 : 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!  Wink
En línea
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #7 : 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.Wink
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!