Título: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 29 de Septiembre de 2010, 10:35:43 am Hola,
Vereis tengo un mapa de 12x4 Pantallas cada una de ellas de 30x20 caracteres, 600 bytes por pantalla lo estoy comprimiendo con RLE con una herramienta propia, la cuestion es que por mucho RLE que use la cosa sigue sin bajar mucho y eso que el mapa tampoco es que este super cargado. Tampoco tengo claro si mi herramienta tiene algun problema por que veo que la app de Karoshi parece que comprime un pelin mas que la mia, cosa que no comprendo. el algoritmo que uso es mas o menos asi: Código: while (index<array.lenght) { a=array[index]; index++; repetidos=0; while (a==array[index]) { repetidos++; index++; } if (repetidos>0) { añade codigo de control al resultado añade nº de ocurrencias al resultado añade nº de caracter al resultado } else { añade nº de caracter al resultado } } creo que el algoritmo es correcto, pero aun y asi me queda bastante grande el fichero resultado. Alguien sabe que algoritmo usan juegos como Dynamite Dan o Abu simbel? Saludos, David Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: kabish en 29 de Septiembre de 2010, 10:59:01 am Usa el bitbuster, el rle solo te dara buenos resultados en casos excepcionales.
http://es.msx.org/BitBuster-1.2.newspost1626.html (http://es.msx.org/BitBuster-1.2.newspost1626.html) Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: Metalbrain en 29 de Septiembre de 2010, 11:23:20 am Vereis tengo un mapa de 12x4 Pantallas cada una de ellas de 30x20 caracteres, 600 bytes por pantalla lo estoy comprimiendo con RLE con una herramienta propia, la cuestion es que por mucho RLE que use la cosa sigue sin bajar mucho y eso que el mapa tampoco es que este super cargado. El algoritmo RLE es extremadamente simple, así que es normal que apenas comprima. Los mejores compresores son exomizer, pucrunch y aPLib, y otras alternativas que pueden funcionar bien son MegaLZ y pletter. Lo suyo es que los pruebes todos y te quedes con el que de el menor tamaño considerando tanto los datos comprimidos como el tamaño del descompresor en si mismo. Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 29 de Septiembre de 2010, 11:59:03 am gracias a los dos.
Probare pletter ya que los enlaces al bitbusters estan rotos :P menuda putadica, por que lo estoy programando en C con el SDCC y pasar el ASM al C es un poco coñazo jejeje ya os contare edit: bastante complicado :P nadie lo tiene pasado a sdcc por casualidad ¿no? Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: pitpan en 29 de Septiembre de 2010, 01:56:12 pm El mejor método de compresión dependerá de lo que tengas que comprimir y lo que quieras conseguir (tamaño, velocidad, etc.). Si las pantallas son las típicas de plataformas, lo mejor es usar metatiles, es decir, definir como un bloque una colección de caracteres, por ejemplo ARBOL. Y entonces, simplemente indicas ARBOL, X,Y. Y ya está. Y sobre eso, si quieres, añades la compresión. Como no vas a tener que manipular mucho los datos, probablemente BitBuster/Pletter te puedan dar una muy buena compresión. Pero vamos, lo de los metatiles es interesante para crear mapeados mucho más extensos, siempre que tengas elementos repetitivos entre pantallas.
En cuanto a RLE, olvídate para algo así. Es muy rápido y está pensado para descomprimir a lo bestia de RAM a VRAM sin necesidad de tener un buffer, pero es muy ineficiente. Lo dicho. Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 29 de Septiembre de 2010, 02:13:32 pm En cuanto a RLE, olvídate para algo así. Es muy rápido y está pensado para descomprimir a lo bestia de RAM a VRAM sin necesidad de tener un buffer, pero es muy ineficiente. Lo dicho. Ok, pasare del RLE, de momento sigo mirando si adapto el pletter a asm de SDCC (de momento chungo) o si paso del SDCC y vuelvo al asm :P Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: SapphiRe_MSX en 29 de Septiembre de 2010, 02:25:53 pm o si paso del SDCC y vuelvo al asm :P Será lo mejor ::) ::) Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 29 de Septiembre de 2010, 04:34:49 pm o si paso del SDCC y vuelvo al asm :P Será lo mejor ::) ::) en ello estoy :) ahora otro problemita :P este es mi intento de pasar la rutina de descompresión de pletter a asMSX original: Código: ; pletter v0.5c msx unpacker asmsx:; call unpack with hl pointing to some pletter5 data, and de pointing to the destination. ; changes all registers ; define lengthindata when the original size is written in the pletter data ; define LENGTHINDATA module pletter macro GETBIT add a,a call z,getbit endmacro macro GETBITEXX add a,a call z,getbitexx endmacro @unpack ifdef LENGTHINDATA inc hl inc hl endif ld a,(hl) inc hl exx ld de,0 add a,a inc a rl e add a,a rl e add a,a rl e rl e ld hl,modes add hl,de ld e,(hl) ld ixl,e inc hl ld e,(hl) ld ixh,e ld e,1 exx ld iy,loop literal ldi loop GETBIT jr nc,literal exx ld h,d ld l,e getlen GETBITEXX jr nc,.lenok .lus GETBITEXX adc hl,hl ret c GETBITEXX jr nc,.lenok GETBITEXX adc hl,hl ret c GETBITEXX jp c,.lus .lenok inc hl exx ld c,(hl) inc hl ld b,0 bit 7,c jp z,offsok jp ix mode6 GETBIT rl b mode5 GETBIT rl b mode4 GETBIT rl b mode3 GETBIT rl b mode2 GETBIT rl b GETBIT jr nc,offsok or a inc b res 7,c offsok inc bc push hl exx push hl exx ld l,e ld h,d sbc hl,bc pop bc ldir pop hl jp iy getbit ld a,(hl) inc hl rla ret getbitexx exx ld a,(hl) inc hl exx rla ret modes word offsok word mode2 word mode3 word mode4 word mode5 word mode6 endmodule ;eof Código: ; pletter v0.5c msx unpacker ; call unpack with hl pointing to some pletter5 data, and de pointing to the destination. ; changes all registers ; define lengthindata when the original size is written in the pletter data ;.define LENGTHINDATA unpack: ;ifdef LENGTHINDATA ; inc hl ; inc hl ;endif ld a,[hl] inc hl exx ld de,0 add a,a inc a rl e add a,a rl e add a,a rl e rl e ld hl,modes add hl,de ld e,[hl] ld ixl,e inc hl ld e,[hl] ld ixh,e ld e,1 exx ld iy,loop literal: ldi loop: add a,a call z,getbit jr nc,literal exx ld h,d ld l,e getlen: add a,a call z,getbitexx jr nc,lenok lus: add a,a call z,getbitexx adc hl,hl ret c add a,a call z,getbitexx jr nc,lenok add a,a call z,getbitexx adc hl,hl ret c add a,a call z,getbitexx jp c,lus lenok: inc hl exx ld c,[hl] inc hl ld b,0 bit 7,c jp z,offsok jp ix mode6: add a,a call z,getbit rl b mode5: add a,a call z,getbit rl b mode4: add a,a call z,getbit rl b mode3: add a,a call z,getbit rl b mode2: add a,a call z,getbit rl b add a,a call z,getbit jr nc,offsok or a inc b res 7,c offsok: inc bc push hl exx push hl exx ld l,e ld h,d sbc hl,bc pop bc ldir pop hl jp iy getbit: ld a,[hl] inc hl rla ret getbitexx: exx ld a,[hl] inc hl exx rla ret modes: dw offsok dw mode2 dw mode3 dw mode4 dw mode5 dw mode6 no encontre ninguna equivalencia para las macros asi que he substituido las llamadas a las macros por el contenido. basicamente es lo unico que he cambiado, pero parece que no funciona bien, alguna idea? Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: pitpan en 29 de Septiembre de 2010, 04:48:08 pm Ojito: el Pletter utiliza descompresores distintos para cada tamaño de tablas. Es decir, las macros sirven para generar código distinto en función de un parámetro. Por lo tanto, te sugiero que pases directamente al BitBuster, cuyo descompresor BitBuster Extreme ocupa unos 80 bytes y es perfectamente compatible - tal cual - con asMSX.
Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 29 de Septiembre de 2010, 04:57:16 pm Ojito: el Pletter utiliza descompresores distintos para cada tamaño de tablas. Es decir, las macros sirven para generar código distinto en función de un parámetro. Por lo tanto, te sugiero que pases directamente al BitBuster, cuyo descompresor BitBuster Extreme ocupa unos 80 bytes y es perfectamente compatible - tal cual - con asMSX. y de donde saco bitbuster? lo he buscado, en la web de teambomba no hay link ¿teneis alguno por aqui? Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: pitpan en 29 de Septiembre de 2010, 05:17:00 pm Está en la página antigua del TEAM BOMBA: Link directo (http://www.teambomba.net/bombaman/download/bitbuster1_2.zip).
En cuanto al descompresor que te dije, no sé por dónde andará... A ver si alguna alma caritativa te lo pasa. No lo tengo a mano. Caso de no salir, lo recuperaré de mis fuentes y lo posteo en la sección de snippets del foro en todo caso. Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: pitpan en 29 de Septiembre de 2010, 05:22:33 pm Puesto en snippets... Sin probar ;)
Vivamos peligrosamente... Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: ARTRAG en 29 de Septiembre de 2010, 10:52:54 pm MSX-O-Mizer v1.5 is by far better of pletter and bitbuster for compression ratio, but a bit slower and needs some ram for working
The file here http://www.msx.org/MSX-O-Mizer-v1.0.newspost4723.html is already version 1.5 Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 30 de Septiembre de 2010, 09:05:04 am Puesto en snippets... Sin probar ;) Vivamos peligrosamente... Pues parece que no va :P Sapphire me paso uno por correo que me funciona bien :) gracias MSX-O-Mizer v1.5 is by far better of pletter and bitbuster for compression ratio, but a bit slower and needs some ram for working The file here http://www.msx.org/MSX-O-Mizer-v1.0.newspost4723.html is already version 1.5 Hola, Disculpa que te conteste en español, escribir en ingles no es lo mío (parece que leer se me da mejor). De momento me quedo con BitBuster :) pero probare el MSX-O-Mizer. Gracias :D Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: SapphiRe_MSX en 30 de Septiembre de 2010, 10:58:03 am Sapphire me paso uno por correo que me funciona bien :) Como para que no fuera... tienes un cachito del código del QBIQS en tus manos ::qbiqsray:: ::qbiqsglow:: ::qbiqsbeam:: Tengo más "librerías" disponibles por aquí por si hacen falta :) Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: pitpan en 30 de Septiembre de 2010, 08:19:44 pm Pues manda todo hacia los snippets, Sap!
Y si quieres publicar el código fuente de cualquier cosa, ya sabes ;) Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: SapphiRe_MSX en 30 de Septiembre de 2010, 11:37:27 pm Pues manda todo hacia los snippets, Sap! Algo iré publicando, sí. Citar Y si quieres publicar el código fuente de cualquier cosa, ya sabes ;) A ver si hay tiempo, de momento las librerías más genéricas irán para snippets, como el posicionar las páginas de la ROM en modo 32K y 48K, que no se si están. Pero ahora a la cama, que mañana hay viajecito :D Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: Madonna Mk 2 en 13 de Octubre de 2010, 03:41:42 pm En Seleniak usé Jetpack™ (LOL!) para hacer caber el copón de datos (sobre todo la música, que iba muy a saco) en 8 KB. La rutina es sencilla, ocupa poco y descomprime rápido. La monté basándome en no sé qué fuentes para Z80 con las que me topé investigando en internet sobre el tema.
La verdad, no soy muy amigo de la compresión, sobre todo porque te hace perder la noción de lo que va a ocupar un determinado fragmento de código o datos, porque alterar n bytes tiene efectos imprevisibles en el resultado de la compresión, y una rutina que te cabía justita, puede acabar desbordándose por bastante al alterar unos pocos bytes :-\ Pero teniendo el MSX una cantidad de RAM nada despreciable -en comparación con las máquinas arcade de la época- y siendo la ROM cara, vale la pena comprimir. No tengo la rutina muy a mano, ni me acuerdo demasiado bien cómo iba, ni sé dónde fue a parar el comando para comprimir, pero si te ves muy apurado y no encuentras nada que te vaya bien, te la puedo buscar, ya que en breve he de hacer limpieza/inventario de proyectos. Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 14 de Octubre de 2010, 08:10:55 am Pues te agradezco la oferta :) pero de momento con el Bitbuster que me paso Sapp tengo mas que suficiente, vamos que las 40 pantallas se me quedan en miseria y compañia :)
Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: Madonna Mk 2 en 14 de Octubre de 2010, 10:15:58 am Perfecto, así le podrás encasquetar más pantallas :joe:
Título: Re: Metodos de compresión de datos ¿cual es el mejor? Publicado por: cybernoid en 14 de Octubre de 2010, 11:04:13 am Perfecto, así le podrás encasquetar más pantallas :joe: :P más ? nooooooo que se me hace muy cuesta arriba, es el primer proyecto que parece que estoy sacando adelante sin tirarlo al cubo de "proyectos que ya terminare cuando pueda" XD De momento al menos parece que gracias a ese cubo de proyectos inacabados mi experiencia ensamblera va subiendo de nivel :) desgraciadamente no ocurre lo mismo con mi experiencia dibujera porque sigo haciendo unos sprites que parecen churros (de feos que son) |