mcleod_ideafix escribió:
240col.asm muestra una cuadrícula de 16x16 cuadros en la zona de paper, cada uno de un color. En realidad, las 16 filas de cuadros contienen los mismos valores para sus píxeles, ya que en modo radastaniano un pixel sólo puede tomar valores del 0 al 15. Si no cambiáramos la paleta, veríamos 16 columnas de cuadros verticales, cada uno de un color.
Hay un error en ese código. En la función:
ld d,0
ld hl,PaletaInicial ;rellenamos la paleta ULAplus con un gradiente con los 64 primeros colores
LoopPaleta ld bc,ULAPLUSADDR ;pero cuidando de que las entradas de la paleta 0,16,24,32,48 sean el negro, para que el
out (c),d ;borde no cambie cuando cambiemos de paleta (mirar PaletaInicial para entender c<F3>mo funciona esto)
ld bc,ULAPLUSDATA
ld a,(hl)
out (c),a
inc hl
inc d
cp 40h
jr nz,LoopPaleta
Fíjate en el cp 40h final, ahí tiene que haber antes un:
ld a,d
Si no, estás comparando el registro A con 40h, que a saber qué tiene ahí el registro A (tiene el valor de color enviado)
Así ese código debe quedar como:
ld d,0
ld hl,PaletaInicial ;rellenamos la paleta ULAplus con un gradiente con los 64 primeros colores
LoopPaleta ld bc,ULAPLUSADDR ;pero cuidando de que las entradas de la paleta 0,16,24,32,48 sean el negro, para que el
out (c),d ;borde no cambie cuando cambiemos de paleta (mirar PaletaInicial para entender c<F3>mo funciona esto)
ld bc,ULAPLUSDATA
ld a,(hl)
out (c),a
inc hl
inc d
ld a,d
cp 40h
jr nz,LoopPaleta
Este error, que parece no fallar en zxuno provoca que se envíen valores mayores que 40h (del registro D) al puerto de ULAPLUSADDR. Los valores menores de 40h significa "cambiar color de paleta", pero los mayores (cuando bit 6 es 1 y bit 7 es 0) significa cambiar modo ulaplus (tomando los 6 bits inferiores).
Dado que en la especificación ULAPlus "estándar" (la de Andrew, sin modos radastan ni modos ZEsarUX) sólo hay dos valores de modo (0 desactivado, 1 activado) este bug provoca que cada vez que los 6 bits inferiores vale 0, se desactiva ULAPlus. Y cuando vale 1, se activa ULAPlus.
En ZEsarUX, cuando se desactiva el modo ULAPlus estándard, se desactivan también los modos extendidos radastan y/o ZEsarUX, por lo que, ese bug provoca que se desactive el modo continuamente (entiendo que en ZX-Uno real no sucede de la misma manera).
Si puedo subo el tap y el asm corregidos
Saludos