cursos:ensamblador:compresion_rle

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:compresion_rle [19-01-2024 08:28] sromerocursos:ensamblador:compresion_rle [19-01-2024 12:35] (actual) – [Programa de ejemplo de descompresión] sromero
Línea 345: Línea 345:
 RLE_decompress: RLE_decompress:
  
-RLE_dec_loop:+rle_dec_loop:
     ld a, (hl)                     ; leemos un byte     ld a, (hl)                     ; leemos un byte
  
     cp 192     cp 192
-    jp nc, RLE_dec_compressed     ; si byte > 192 = está comprimido+    jp nc, rle_dec_compressed     ; si byte > 192 = está comprimido
     ld (de), a                    ; si no está comprimido, escribirlo     ld (de), a                    ; si no está comprimido, escribirlo
     inc de     inc de
Línea 355: Línea 355:
     dec bc     dec bc
  
-RLE_dec_loop2:+rle_dec_loop2:
     ld a, b     ld a, b
     or c     or c
-    jr nz, RLE_dec_loop+    jr nz, rle_dec_loop
     ret                           ; miramos si hemos acabado     ret                           ; miramos si hemos acabado
  
-RLE_dec_compressed:               ; bucle para descompresión+rle_dec_compressed:               ; bucle para descompresión
     push bc     push bc
-    and 63                        ; cogemos el numero de repeticiones+    and %00111111                 ; cogemos el numero de repeticiones
     ld b, a                       ; lo salvamos en B     ld b, a                       ; lo salvamos en B
     inc hl                        ; y leemos otro byte (dato a repetir)     inc hl                        ; y leemos otro byte (dato a repetir)
     ld a, (hl)     ld a, (hl)
  
-RLE_dec_loop3:+rle_dec_loop3:
     ld (de), a                    ; bucle de escritura del dato B veces     ld (de), a                    ; bucle de escritura del dato B veces
     inc de     inc de
-    djnz RLE_dec_loop3+    djnz rle_dec_loop3
     inc hl     inc hl
     pop bc                        ; recuperamos BC     pop bc                        ; recuperamos BC
Línea 377: Línea 377:
                                   ; RLE no son correctos. Cuidado (mem-smashing).                                   ; RLE no son correctos. Cuidado (mem-smashing).
     dec bc     dec bc
-    jr RLE_dec_loop2+    jr rle_dec_loop2
     ret     ret
 </code> </code>
Línea 567: Línea 567:
  
 \\  \\ 
-  * **Método INCBIN**: Incluyendo el binario directamente en Pasmo con la directiva ''INCBIN'' asociándole una etiqueta para poder hacer referencia a él:\\ <code>+  * **Método INCBIN**: Incluyendo el binario directamente en Pasmo con la directiva ''INCBIN'' asociándole una etiqueta para poder hacer referencia a él:\\ \\ <code>
 Datos_Comprimidos: Datos_Comprimidos:
    INCBIN "fichero.rle"    INCBIN "fichero.rle"
Línea 573: Línea 573:
 \\  \\ 
  
-  * **Método BIN2CODE**: Convirtiendo los datos binarios a "texto" con una utilidad como BIN2C o BIN2CODE (las tenéis disponibles como descargas en la sección de ficheros). Estas utilidades para PC (Linux, MAC, DOS/Windows) toman un fichero binario y lo convierten a datos listos para incluir en nuestros programas:\\ <code>+  * **Método BIN2CODE**: Convirtiendo los datos binarios a "texto" con una utilidad como BIN2C o BIN2CODE (las tenéis disponibles como descargas en la sección de ficheros). Estas utilidades para PC (Linux, MAC, DOS/Windows) toman un fichero binario y lo convierten a datos listos para incluir en nuestros programas:\\ \\ <code>
 [sromero@compiler:~rlezx]$ bin2code sokoban.rle datos.asm a [sromero@compiler:~rlezx]$ bin2code sokoban.rle datos.asm a
 BIN2CODE v1.0             By NoP of Compiler SoftWare BIN2CODE v1.0             By NoP of Compiler SoftWare
Línea 618: Línea 618:
 Wait_For_Keys_Pressed:         ; Bucle para esperar pulsación de tecla Wait_For_Keys_Pressed:         ; Bucle para esperar pulsación de tecla
     xor a     xor a
-    in a, (254+    in a, ($fe
-    or 224+    or %11100000
     inc a     inc a
     jr z, Wait_For_Keys_Pressed     jr z, Wait_For_Keys_Pressed
     ret                          ; Fin del programa     ret                          ; Fin del programa
  
-;+Aquí incluiremos el código de la rutina RLE_decompress 
-;; RLE_decompress +;; --- RLE_decompress ---
-;; Descomprime un bloque de datos RLE de memoria a memoria. +
-;; +
-;; Entrada a la rutina+
-;; +
-;; HL = dirección origen de los datos RLE. +
-;; DE = destino donde descomprimir los datos. +
-;; BC = tamaño de los datos comprimidos. +
-;; +
-RLE_decompress: +
- +
-RLE_dec_loop: +
-    ld a, (hl)                         leemos un byte +
- +
-    cp 192 +
-    jp nc, RLE_dec_compressed          si byte > 192 = está comprimido +
-    ld (de), a                         ; si no está comprimido, escribirlo +
-    inc de +
-    inc hl +
-    dec bc +
- +
-RLE_dec_loop2: +
-    ld a, b +
-    or c +
-    jr nz, RLE_dec_loop +
-    ret                                 ; miramos si hemos acabado +
- +
-RLE_dec_compressed:                    ; bucle para descompresión +
-    push bc +
-    and 63                              ; cogemos el numero de repeticiones +
-    ld b, a                             ; lo salvamos en B +
-    inc hl                              ; y leemos otro byte (dato a repetir) +
-    ld a, (hl) +
- +
-RLE_dec_loop3: +
-    ld (de), a                          ; bucle de escritura del dato B veces +
-    inc de +
-    djnz RLE_dec_loop3 +
-    inc hl +
-    pop bc                              ; recuperamos BC +
-    dec bc                              ; Este dec bc puede hacer BC=0 si los datos +
-                                        ; RLE no correctos. Cuidado (mem-smashing). +
-    dec bc +
-    jr RLE_dec_loop2 +
-    ret+
  
 ; Aquí viene nuestra pantalla comprimida con RLE. ; Aquí viene nuestra pantalla comprimida con RLE.
Línea 751: Línea 707:
 RLE_Comprimir: RLE_Comprimir:
 rle_byte_1: rle_byte_1:
-          ld e, (IX+$00)                 ; leer byte+          ld e, (ix+$00)                 ; leer byte
           inc ix                         ; incrementar posicion           inc ix                         ; incrementar posicion
           dec bc                         ; descontar contador           dec bc                         ; descontar contador
Línea 796: Línea 752:
           ret z                          ; /           ret z                          ; /
           dec bc                         ; descontar contador           dec bc                         ; descontar contador
-          ld a, (IX+$00)                 ; leer byte+          ld a, (ix+$00)                 ; leer byte
           inc ix                         ; incrementar posicion           inc ix                         ; incrementar posicion
           ret           ret
Línea 932: Línea 888:
 \\  \\ 
 **[ [[.:indice|⬉]] | [[.:gfx5_mapeados|⬅]] | [[.:avanzadas1|➡]] ]** **[ [[.:indice|⬉]] | [[.:gfx5_mapeados|⬅]] | [[.:avanzadas1|➡]] ]**
 +
  • cursos/ensamblador/compresion_rle.1705652883.txt.gz
  • Última modificación: 19-01-2024 08:28
  • por sromero