Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previaÚltima revisiónAmbos lados, revisión siguiente | ||
cursos:ensamblador:compresion_rle [19-01-2024 08:29] – sromero | cursos:ensamblador:compresion_rle [19-01-2024 12:34] – [Rutina descompresora] sromero | ||
---|---|---|---|
Línea 363: | Línea 363: | ||
rle_dec_compressed: | rle_dec_compressed: | ||
push bc | push bc | ||
- | and 63 | + | and %00111111 |
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) | ||
Línea 567: | Línea 567: | ||
\\ | \\ | ||
- | * **Método INCBIN**: Incluyendo el binario directamente en Pasmo con la directiva '' | + | * **Método INCBIN**: Incluyendo el binario directamente en Pasmo con la directiva '' |
Datos_Comprimidos: | Datos_Comprimidos: | ||
| | ||
Línea 573: | Línea 573: | ||
\\ | \\ | ||
- | * **Método BIN2CODE**: Convirtiendo los datos binarios a " | + | * **Método BIN2CODE**: Convirtiendo los datos binarios a " |
[sromero@compiler: | [sromero@compiler: | ||
BIN2CODE v1.0 By NoP of Compiler SoftWare | BIN2CODE v1.0 By NoP of Compiler SoftWare | ||
Línea 624: | Línea 624: | ||
ret ; Fin del programa | ret ; Fin del programa | ||
- | ;; | + | ; Aquí incluiremos el código |
- | ;; RLE_decompress | + | ;; --- RLE_decompress --- |
- | ;; Descomprime un bloque | + | |
- | ;; | + | |
- | ;; 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 | + | |
- | 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: | + | |
- | 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: | ||
\\ | \\ | ||
**[ [[.: | **[ [[.: | ||
+ |