; Mostrando la organizacion de la videomemoria (atributos) ORG 50000 ; Pseudocodigo del programa: ; ; Borramos la pantalla ; Apuntamos HL a 22528 ; Repetimos 24 veces: ; Esperamos pulsacion de una tecla ; Repetimos 32 veces: ; Escribir un valor de PAPEL 0-7 en la direccion apuntada por HL ; Incrementar HL Start: ld a, 0 call ClearScreen ; Borramos la pantalla ld hl, 22528 ; HL apunta a la VRAM ld b, 24 ; Repetimos para 192 lineas bucle_lineas: ld d, b ; Nos guardamos el valor de D para el ; bucle exterior (usaremos B ahora en otro) ld b, 32 ; B=32 para el bucle interior call Wait_For_Key ; Esperamos que se pulse y libere tecla ld a, (papel) ; Cogemos el valor del papel inc a ; Lo incrementamos ld (papel), a ; Lo guardamos de nuevo cp 8 ; Si es == 8 (>7), resetear jr nz,no_resetear_papel ld a, 255 ld (papel), a ; Lo hemos reseteado: lo guardamos xor a ; A=0 no_resetear_papel: sla a ; Desplazamos A 3 veces a la izquierda sla a ; para colocar el valor 0-7 en los bits sla a ; donde se debe ubicar PAPER (bits 3-5). bucle_32_bytes: ld (hl), a ; Almacenamos A en (HL) = attrib de 8x8 inc hl ; siguiente byte (siguientes 8x8 pixeles.) djnz bucle_32_bytes ; 32 veces = 32 bytes = 1 scanline de bloques ld b, d ; Recuperamos el B del bucle exterior djnz bucle_lineas ; Repetir 24 veces jp Start ; Inicio del programa papel DEFB 255 ; Valor del papel ;----------------------------------------------------------------------- ; Limpiar la pantalla con el patron de pixeles indicado. ; Entrada: A = patron a utilizar ;----------------------------------------------------------------------- ClearScreen: ld hl, 16384 ld (hl), a ld de, 16385 ld bc, 192*32-1 ldir ret INCLUDE "utils.asm" END 50000