El problema es que hago un OR A al inicio del bucle para que active el flag P de Paridad, y que justo después se detecte esta operación con un JP PE,** pero a veces funciona y otras no.
Hago una llamada a una función (pintar_linea) que simplemente hace un LDIR para pintar la línea, comando que según he leído resetea el flag P.
He estado depurando y el INC B es el que me está detectando que no hay Overflow y me pone flag V a 0, provocando que también se vea como P/V Impar. Por ej. al principio cuando hago OR A del valor en A=B=7A=122 debería ponerse a 1 ya que es PAR pero no lo hace, y el JP PE,_par no salta a su etiqueta.
Muestro una foto de las líneas que detecta como pares (verde brillante) y las impares (verde normal). Deberían verse líneas finas de 1pix, alternando una verde brillante y la siguiente verde oscuro, y así sucesivamente, en modo de pruebas.
¿Por qué el flag de paridad no me funciona como debería?
GRACIAS.
Código: Seleccionar todo
;;------------------------------------------------------------------------
;; *********** pintar_terreno ********
;; Dibujar líneas con un patrón de color y tramado en función del nº de
;; línea actual o si es par/impar.
;; ENTRADAS
;; Ctes: Verde, VerdeBr, ... etc.
;; SALIDAS:
;; color: byte de color en formato píxel Mode0
;; pintar_linea:
;; Registros destruidos: AF, BC,
;;------------------------------------------------------------------------
pintar_terreno:
ld b, #120 ;;FOR b=120 TO 199 - líneas de pantalla
bucle_pintar:
ld a, b
or a ;;activar flag de paridad P/V par=1 // impar=0
_if:
jp pe, _par ;;IF (b es par) THEN _par
_impar: ;;ELSE (b es impar)
ld a, #Verde ;;asignar cte. Verde oscuro
jr _end_if ;;salir del IF
_par:
ld a, #VerdeBr ;;asignar cte. Verde brillante
_end_if:
push bc ;;salvar en B la línea actual del bucle
ld (color), a ;;asignar parámetro de color para la función
call pintar_linea
pop bc ;;NEXT b
ld a, #199
cp b
ret z
inc b ;;Incrementar bucle. Modifica flag de Overflow V=1 // No Overflow V=0
jr bucle_pintar