 	;------------------------------------------------
	;       UFV - Arquitectura de Computadores	    
	;------------------------------------------------
	; Programación ensamblador Z80
	; Práctica 1 : Barras verticales
	; Cuatro posibles soluciones
	;------------------------------------------------
	; Curso 2021/2022 - Daniel León
	;------------------------------------------------

		DEVICE ZXSPECTRUM48
		org $8000						; inicio del programa - directiva de ensamblador (afecta al cálculo de etiquetas)
		
		di 								; Deshabilitar las interrupciones enmascarables		
		jp inicio4						; Elige el metodo : inicio1, inicio2 o inicio3
inicio4: ; Otra forma más. Ahora mando de 4 en 4 las escrituras y hago un bucle de 768/4
            ld hl,level1
            ld c,(hl)
            ld d,c
            inc hl
            ld c,(hl)
            ld e,c
            inc hl
            ld c,(hl) 
            ld b,c
            inc hl
            ld c,(hl)
            ld h,c
             inc hl
            ld c,(hl)
		ld hl, $5800					; Dirección de pantalla
		ld c,08		; Color

bucle4:	ld b, 4					; Voy a escribir 4 cuadros
cuatro: ld a, c 						; pero tengo que mover el color a la posición de paper -> Multiplicar por 8
		add a
		add a 
		add a 
		ld (hl), a				; Escribo
		inc hl 							; Incremento
		djnz cuatro 					; Bucle for
		inc c							; Siguiente color
		ld a, c 						; paso c al registro a para hacer la operación módulo 8
		and 7							; esto es un módulo 8, ya que sólo me quedo con los 3 bits bajos, 0..7
		ld c, a 						; vuelvo a dejar el color en C
		ld a, h 						; compruebo que no he llegado al final de la zona de pantalla
		cp $5B
		jr nz, bucle4

		jp final



final: 	and 7							; borde de colores
		out ($FE),a
		inc a

		jr final						; Salto relativo incondicional a final (bloqueo del programa)												

maplist: DEFW level1, 0

level1: DEFB 5, 19  ; Map Size Y, Size X
        DEFB 2, 1  ; Initial man position Y,X
        DEFB 1  ; number of goals for this level
        DEFB $08, $08, $08, $08, $08, $08, $08, $08, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80  ; Map data, 1 DEFB per map row
        DEFB $80, $80, $80, $80, $80, $80, $80, $80, $80, $00, $00, $00, $00, $00, $00, $00, $00, $40, $80
        DEFB $80, $10, $00, $00, $00, $00, $00, $00, $00, $00, $20, $80, $80, $80, $80, $80, $80, $80, $80
        DEFB $80, $80, $80, $80, $80, $80, $80, $80, $80, $00, $00, $80, $08, $08, $08, $08, $08, $08, $08
        DEFB $08, $08, $08, $08, $08, $08, $08, $08, $80, $80, $80, $80, $08, $08, $08, $08, $08, $08, $08

        ;               ###########
        ;       #########        .#
        ;       #@        $########
        ;       #########  #
        ;               #### 
