Ramón soltó algo así como:
La compresión que metía al principio era creo una RLE, pero ahora
ya está metida la compresión/descompresión .MIF
No estoy seguro, pero me jugaría un pulmón a que sólo descomprime.
En principio por la simple razón de que el autor de MIF solo publicó el
código de la descompresión (o que os pensabais, que Néstor habia partido
de cero? XD) De todas formas... para que vas a uasr la compresión en un
juego???
Sí, llevas razón, no ceo que tenga la compresión. Total, yo para
mi ReMIF he hecho lo mismo: copiar el algoritmo de descompresión del
autor del MIF y hacer mi propio programa con él.
técnica si no recuerdo mal consistía en usar un byte de prefijo que
indicaba según su valor el numero de veces que estaba repetido el dato
(color) del indicado por el byte siguiente.
Era algo así:
PREFIJO (en binario):
1xxxxxxxx : el color indicado por el siguiente byte esta repetido x
veces
00xxxxxx: Los siguientes x bytes no están comprimidos
01xxxxxx: No me acuerdo XD
Pues sí, un RLE.
Es muy parecido al del Randar 3 y otros juegos de Compile. Metes datos
de 7 bits con paridad. El bit de paridad especifica si lo que vienen
a continuación son bytes comprimidos o sin comprimir. Si dicho bit (el
7) está a uno, significa que el número de veces indicadas por esos 7
bits restantes serán las veces que se repita el siguiente byte.
Si después de ese "chunk" de datos, nos encontramos con un byte
cuyo bit está a 0, significa que hay nn bytes que están sin comprimir
a continuación.
El algoritmo de descompresión usa OUTIR y escribe directamente sobre
VRAM usando método auto-incremental, con lo cuál la descompresión se
hace con una rutina de a lo sumo 10 o 15 instrucciones, y es casi
tan rápida como cargar en VRAM los datos sin comprimir. Y si me apuras
es más rápida aún, porque el acceso que tiene que hacer a disco es menor,
y compensa la pérdida de velocidad al descomprimir por el aumento
de la misma al no acceder tanto a disco.
Como veis si la imagen tiene muchas tramas lo que hace esta técnica es
añadir prefijos a saco, con lo cual se aumenta el tamaño del fichero.
Además de que comprime sólo "en horizontal".
El MIF también comprime solo en "horizontal". La que comprime en "vertical"
es la JPEG, a esa sí que le cuesta trabajo al pobre Z80.
Por cierto, que la compresión JPEG se basa en el mismo sistema que tiene
el SCREEN 12 .... Al fin y al cabo, el sistema YJK no es más que un sistema
de ahorro de memoria con pérdida controlada, y de forma muy parecida
a como lo hace el JPEG: sacrificando información de color pero manteniendo
la información de luminancia.
Un saludo,
Jose Angel Morente (msxjam(_en_)crosswinds(_punto_)net)
*MSX DREAMS* (msxdreams(_en_)hotmail(_punto_)com)
¡Suscríbete a HispaMSX!
http://es.onelist.com/community/hispamsx
hispamsx-subscribe(_en_)onelist(_punto_)com
msxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsx