; Fundido de los pixeles a cero con una cortinilla ORG 50000 Start: ; Rellenamos la VRAM de pixeles copiando 6 KB de la ROM ld hl, 0 ld de, 16384 ld bc, 6144 ldir call Wait_For_Key call FadeScreen ret ;----------------------------------------------------------------------- ; Fundido de pantalla decrementando los pixeles de pantalla ;----------------------------------------------------------------------- FadeScreen: push af push bc push de push hl ; Preservamos los registros ld b, 9 ; Repetiremos el bucle 9 veces ld c, 0 ; Nuestro contador de columna fadegfx_loop1: ld hl, 16384 ; Apuntamos HL a la zona de atributos ld de, 6144 ; Iteraciones bucle fadegfx_loop2: ld a, (hl) ; Cogemos el grupo de 8 pixeles ;-- Actuamos sobre el valor de los pixeles -- cp 0 ; jr z, fadegfx_save ; Si ya es cero, no hacemos nada ex af, af' ; Nos guardamos el dato ld a, c ; Pasamos el contador a A cp 15 ; Comparamos A con 15 jr nc, fadegfx_mayor15 ; Si es mayor, saltamos ex af, af' ; Recuperamos en A los pixeles rla ; Rotamos A a la izquierda jr fadegfx_save ; Y guardamos el dato fadegfx_mayor15: ex af, af' ; Recuperamos en A los pixeles srl a ; Rotamos A a la derecha ;-- Fin actuacion sobre el valor de los pixeles -- fadegfx_save: ld (hl), a ; Almacenamos el atributo modificado inc hl ; Avanzamos puntero de memoria ; Incrementamos el contador y comprobamos si hay que resetearlo inc c ld a, c cp 32 jr nz, fadegfx_continue ld c, 0 fadegfx_continue: dec de ld a, d or e jp nz, fadegfx_loop2 ; Hasta que DE == 0 djnz fadegfx_loop1 ; Repeticion 9 veces pop hl pop de pop bc pop af ; Restauramos registros ret INCLUDE "utils.asm" END 50000