cursos:ensamblador:gfx1_vram

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cursos:ensamblador:gfx1_vram [19-01-2024 08:15] sromerocursos:ensamblador:gfx1_vram [21-01-2024 18:43] (actual) – [Efectos sobre la imagen y los atributos] sromero
Línea 133: Línea 133:
     ORG 50000     ORG 50000
  
-    ld hl, 18514       ; Scanline 0 en Y=96 +    ld hl, 18514           ; Scanline 0 en Y=96 
-    ld a, 60           ; 00111100b +    ld a, 60               ; 00111100b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 18770       ; Scanline 1 en Y=97 +    ld hl, 18770           ; Scanline 1 en Y=97 
-    ld a, 66           ; 01000010b +    ld a, 66               ; 01000010b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 19026       ; Scanline 2 en Y=98 +    ld hl, 19026           ; Scanline 2 en Y=98 
-    ld a, 66           ; 01000010b +    ld a, 66               ; 01000010b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 19282       ; Scanline 3 en Y=99 +    ld hl, 19282           ; Scanline 3 en Y=99 
-    ld a, 126          ; 01111110b +    ld a, 126              ; 01111110b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 19538       ; Scanline 4 en Y=100 +    ld hl, 19538           ; Scanline 4 en Y=100 
-    ld a, 66           ; 01000001b +    ld a, 66               ; 01000001b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 19794       ; Scanline 5 en Y=101 +    ld hl, 19794           ; Scanline 5 en Y=101 
-    ld a, 66           ; 01000001b +    ld a, 66               ; 01000001b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 20050       ; Scanline 6 en Y=102 +    ld hl, 20050           ; Scanline 6 en Y=102 
-    ld a, 66           01000001b +    ld a, %01000001        También se puede usar binario 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
-    ld hl, 20306       ; Scanline 7 en Y=103 +    ld hl, 20306           ; Scanline 7 en Y=103 
-    ld a, 0            ; 00000000b +    ld a, 0                ; 00000000b 
-    ld (hl), a         ; Escribir+    ld (hl), a             ; Escribir
  
     ret     ret
Línea 225: Línea 225:
 <code basic> <code basic>
 10 BORDER 1: PAPER 1: INK 7: CLS 10 BORDER 1: PAPER 1: INK 7: CLS
-20 For r = 10 TO 70 STEP 10 : CIRCLE 128, 96, R : NEXT R+20 FOR r = 10 TO 70 STEP 10 : CIRCLE 128, 96, R : NEXT R
 30 PAUSE 0 30 PAUSE 0
 40 INK 2 : PLOT 30, 30 : DRAW 220, 120 40 INK 2 : PLOT 30, 30 : DRAW 220, 120
Línea 334: Línea 334:
 <code basic> <code basic>
 10 CLS 10 CLS
-20 For i=0 TO 31 : POKE 16384+I, 170 : NEXT I+20 FOR i=0 TO 31 : POKE 16384+I, 170 : NEXT I
 30 PAUSE 0 30 PAUSE 0
 </code> </code>
Línea 356: Línea 356:
 <code basic> <code basic>
 10 CLS 10 CLS
-20 For i=0 TO 63 : POKE 16384+I, 170 : NEXT I+20 FOR i=0 TO 63 : POKE 16384+I, 170 : NEXT I
 30 PAUSE 0 30 PAUSE 0
 </code> </code>
Línea 914: Línea 914:
 ;------------------------------------------------------------ ;------------------------------------------------------------
 SetBorder: SetBorder:
-    out (254), a+    out ($fe), a
     ret     ret
  
Línea 934: Línea 934:
 ;------------------------------------------------------------ ;------------------------------------------------------------
 SetBorder: SetBorder:
-    out (254), a           ; Cambiamos el color del borde+    out ($fe), a           ; Cambiamos el color del borde
     rlca     rlca
     rlca     rlca
Línea 941: Línea 941:
     jr nz, SetBorder_fin   ; No es bright -> guardarlo     jr nz, SetBorder_fin   ; No es bright -> guardarlo
                            ; Si es bright                            ; Si es bright
-    xor 7                  ; -> cambiar la tinta a 0+    xor %00000111          ; -> cambiar la tinta a 0
  
 SetBorder_fin: SetBorder_fin:
Línea 984: Línea 984:
  
 <code basic> <code basic>
-10 For i=0 TO 7 : BORDER I : NEXT I : GOTO 10+10 FOR i=0 TO 7 : BORDER I : NEXT I : GOTO 10
 </code> </code>
  
Línea 1194: Línea 1194:
 fadescreen_loop2: fadescreen_loop2:
     ld a, (hl)                   ; Cogemos el atributo     ld a, (hl)                   ; Cogemos el atributo
-    and 127                      ; Eliminamos el bit de flash+    and %01111111                ; Eliminamos el bit de flash
     ld c, a     ld c, a
  
-    and 7                        ; Extraemos la tinta (and 00000111b)+    and %00000111                ; Extraemos la tinta (and 00000111b)
     jr z, fadescreen_ink_zero    ; Si la tinta ya es cero, no hacemos nada     jr z, fadescreen_ink_zero    ; Si la tinta ya es cero, no hacemos nada
  
Línea 1210: Línea 1210:
     sra a                        ; con 3 instrucciones de desplazamiento >>     sra a                        ; con 3 instrucciones de desplazamiento >>
  
-    and 7                        ; Eliminamos el resto de bits+    and %00000111                ; Eliminamos el resto de bits
     jr z, fadescreen_paper_zero  ; Si ya es cero, no lo decrementamos     jr z, fadescreen_paper_zero  ; Si ya es cero, no lo decrementamos
  
Línea 1246: Línea 1246:
  
  Rutinas más complejas pueden producir cortinillas y efectos mucho más vistosos. En la revista Microhobby se publicaron muchos de estos efectos de zoom, desaparición de pantalla o inversión, dentro de la sección //Trucos//.  Rutinas más complejas pueden producir cortinillas y efectos mucho más vistosos. En la revista Microhobby se publicaron muchos de estos efectos de zoom, desaparición de pantalla o inversión, dentro de la sección //Trucos//.
 +
 +Del mismo modo, el libro **//40 Best Machine code Routines for the ZX Spectrum//** ("Las 40 mejores rutinas en código máquina para el ZX Spectrum") de //John Hardman y Andrew Hewson// nos proporciona una serie de rutinas en ensamblador para realizar diferentes acciones con los píxeles y los atributos de la videoram, como por ejemplo:
 +
 +\\ 
 +   * Scrollear atributos a izquierda, derecha, arriba o abajo.
 +   * Scroll de pantalla de un carácter (8 pixels) a izquierda, derecha, arriba o abajo.
 +   * Scroll de pantalla de un pixel a izquierda, derecha, arriba o abajo.
 +   * Mezclar dos imágenes con ''OR'' o ''XOR''.
 +   * Inversión de la pantalla (píxeles a 0 se ponen a 1, y píxeles a 1 se ponen a 0).
 +   * Invertir carácter vertical y horizontalmente.
 +   * Rotar carácter 90º en sentido horario.
 +   * Alterar todos los atributos de la pantalla (los bits deseados).
 +   * Cambiar todos los atributos de la pantalla de un determinado valor por otro valor.
 +   * Rellenado de regiones cerradas (poniendo a 1 los píxeles dentro de esas regiones).
 +   * Impresión de figuras.
 +   * Copia de una zona de la pantalla en otra, ampliándola por una cantidad entera (por ejemplo, x2 o x3).
 +
  
 \\  \\ 
  • cursos/ensamblador/gfx1_vram.1705652105.txt.gz
  • Última modificación: 19-01-2024 08:15
  • por sromero