; Fundido de pantalla ORG 50000 ld de, 16384 ld bc, 32*192 ld hl, 1234 ldir ; copy some data ld de, 16384+6144 ld bc, 768 ld hl, 1234 ldir ; copy some atributes ld b, 9 ; Repetiremos el bucle 9 veces fadescreen_loop1: ld hl, 16384+6144 ; Apuntamos HL a la zona de atributos ld de, 768 ; Iteraciones bucle halt halt ; Ralentizamos el efecto fadescreen_loop2: ld a, (hl) ; Cogemos el atributo and %01111111 ; Eliminamos el bit de flash ld c, a and %00000111 ; Extraemos la tinta (and 00000111b) jr z, fadescreen_ink_zero ; Si la tinta ya es cero, no hacemos nada dec a ; Si no es cero, decrementamos su valor fadescreen_ink_zero: ex af, af' ; Nos hacemos una copia de la tinta en A' ld a, c ; Recuperamos el atributo sra a sra a ; Pasamos los bits de paper a 0-2 sra a ; con 3 instrucciones de desplazamiento >> and %00000111 ; Eliminamos el resto de bits jr z, fadescreen_paper_zero ; Si ya es cero, no lo decrementamos dec a ; Lo decrementamos fadescreen_paper_zero: sla a sla a ; Volvemos a color paper en bits 3-5 sla a ; Con 3 instrucciones de desplazamiento << ld c, a ; Guardamos el papel decrementado en A ex af, af' ; Recuperamos A' or c ; A = A or c = PAPEL OR TINTA ld (hl), a ; Almacenamos el atributo modificado inc hl ; Avanzamos puntero de memoria dec de ld a, d or e jp nz, fadescreen_loop2 ; Hasta que DE == 0 djnz fadescreen_loop1 ; Repeticion 9 veces bucle: jp bucle END 50000