Exomizer 2, rutinas actualizadas

Programando el Amstrad en Ensamblador.
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
Avatar de Usuario
Metalbrain
Forero habitual
Forero habitual
Mensajes: 151
Registrado: Mar 30 Oct , 2007 1:45 pm
Ubicación: Sevilla

Re: Exomizer 2, rutinas actualizadas

Mensajepor Metalbrain » Dom 27 Ene , 2013 11:54 am

Bueno, pues ya (parece que) ha llegado a su culminación este gran proceso de optimización de exomizer comenzado por Urusergi, y continuado de forma grandiosa por Antonio Villena, con apenas algunas modestas contribuciones mías.

Resumiendo el hilo: Por una parte, los decompresores se han reducido de forma brutal y son un pelín más rápidos, y por otra se han generado versiones alternativas (no tan pequeñas) optimizadas en velocidad, de forma que podemos escoger entre 4 variantes. La variante 1 resulta especialmente atractiva, ya que al precio de entre 3 y 5 bytes, produce una ganancia del 14% de velocidad.

Aparte de eso, el programa optimizador (exoopt) ha sido reescrito desde cero por Antonio Villena, de forma que se le puede pasar como parámetro la velocidad (y dirección, que antes siempres se utilizaba hacia delante) deseada, y generará automáticamente el descompresor necesario (se le pueden incluso introducir varios archivos como parámetros, y generará la versión más simple si no aparecen cadenas de literales y la completa si aparecen). Este nuevo optimizador aparte de lo que hacía antes (invertir el orden de lectura de los bits, y quitar 2 bits redundantes) efectua otros cambios en los datos, que a veces pueden ser contraproducentes (aumenta un pelín el tamaño), pero permiten simplificar más aún los descompresores.

Las nuevas versiones se pueden encontrar aquí:
http://emuscriptoria.svn.sourceforge.ne ... ria/deexo/

y un exoopt ya compilado, aquí:
http://retrolandia.net/foro/showthread. ... =48&page=6

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 27 Ene , 2013 6:42 pm

¡Hola!

He intentado usar la última versión del exoopt pero me lanza un error. El proceso si no me equivoco es primero exomizar el archivo (con la opción raw) y luego pasarle el optimizador. ¿No es así?
Así es como lo he hecho y cada vez que intento pasarle el optimizador el programa me peta. ¿Alguna idea?

¡Saludos!

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 27 Ene , 2013 7:31 pm

Hola pacomix

Sí, el proceso que has hecho es el correcto. Lo mismo has puesto un parámetro mal o has descubierto un bug en el exoopt. Los parámetros del nuevo exoopt son distintos a los del antiguo. Escríbeme exactamente los parámetros en línea de comandos que has usado, si veo que están mal te lo comento. Si estuviesen bien sería cuestión de un bug y para reproducirlo me tendrías que enviar el archivo.

Edito: En cualquier caso tendría que revisarlo, ya que incluso con los parámetros mal no debería petar el exoopt.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 27 Ene , 2013 7:39 pm

¡Hola!

Ahí van los comandos y la salida. La versión que he usado es win32 y estoy en un Windows7.

exomizer raw -b -o HiWorld.temp c:\amstrad\bin\hiworld.bin

Phase 1: Instrumenting file
-----------------------------
Length of indata: 20365 bytes.
[building.directed.acyclic.graph.building.directed.acyclic.graph.]
Instrumenting file, done.

Phase 2: Calculating encoding
-----------------------------
pass 1: optimizing ..
[finding.cheapest.path.finding.cheapest.path.finding.cheapest.pat]
size 48181.0 bits ~6023 bytes
pass 2: optimizing ..
[finding.cheapest.path.finding.cheapest.path.finding.cheapest.pat]
size 48078.0 bits ~6010 bytes
pass 3: optimizing ..
Calculating encoding, done.

Phase 3: Generating output file
------------------------------
Encoding: 11233334637010BA,1222,2354677778788882,0324516888A70BCE
Length of crunched data: 6039 bytes.
Literal sequences are not used and the safety offset is 2.


Y luego el optimizador:

exoopt .\HiWorld.temp 0x8000 b3

Aquí no obtengo salida alguna y me da un pete al cabo de unos segundos. He probado con varios bins de diferente longitud entre 1 y 25Kb y en todos me pasa lo mismo... ¿Puede ser debido al sistema operativo usado? Mmmmh...

También he probado con diferentes parámetros y tampoco he conseguido nada. No puedo adjuntar aquí ningun archivo. Me dice que la extensión .bin no está permitida. O_o

¡Saludos!

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 27 Ene , 2013 7:43 pm

Pon 8000 en lugar de 0x8000 (el prefijo 0x no es necesario). Y avísame si te funciona o no.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 27 Ene , 2013 7:47 pm

No... exactamente igual... ya lo intenté también de esa forma. Había un parámetro que no probé antes con exomizer.exe y ahora sí me funciona. Si no especificas -r el exoopt.exe peta. ¿Es eso normal o es un fallo?

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 27 Ene , 2013 7:58 pm

Ah sí, era eso:
Las 4 opciones legales de llamar a exomizer son estas:

Código: Seleccionar todo

exomizer raw <input_file> -o <intermediate_file>
exomizer raw <input_file> -c -o <intermediate_file>
exomizer raw <input_file> -b -r -o <intermediate_file>
exomizer raw <input_file> -b -r -c -o <intermediate_file>
De todas formas tendría que cambiar exoopt para que no petara. Se cuelga porque al tener un bitstream comprimido no válido se desborda el buffer. Tendría que mostrar un mensaje del tipo "Archivo de entrada no válido" para que el usuario tratase de encontrar el problema en el exomizer.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 27 Ene , 2013 8:06 pm

¿No sería más sencillo mostrar dicha información en el mensaje de ayuda del exoopt? :)

Ya que estamos. ¿No hay que especificarle al programa ensamblador generado con exoopt la dirección origen y destino en hl y de respectivamente? No he visto esa información.

¡Saludos!

P.S.: Mañana intentaré hacerme un cargador para probar las rutinas.

Avatar de Usuario
Metalbrain
Forero habitual
Forero habitual
Mensajes: 151
Registrado: Mar 30 Oct , 2007 1:45 pm
Ubicación: Sevilla

Re: Exomizer 2, rutinas actualizadas

Mensajepor Metalbrain » Dom 27 Ene , 2013 8:30 pm

De todas formas tendría que cambiar exoopt para que no petara. Se cuelga porque al tener un bitstream comprimido no válido se desborda el buffer. Tendría que mostrar un mensaje del tipo "Archivo de entrada no válido" para que el usuario tratase de encontrar el problema en el exomizer.
Aparte de eso hay que corregir otro problema. En la ayuda pone "<file1> <file2> .. <fileN> <output_file> <table_address> [<type>]", y el parámetro <output_file> ya no existe.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 27 Ene , 2013 8:38 pm

Pues sí... de dicho parámetro ya me dí cuenta :P

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 27 Ene , 2013 8:59 pm

¿No sería más sencillo mostrar dicha información en el mensaje de ayuda del exoopt? :)

Ya que estamos. ¿No hay que especificarle al programa ensamblador generado con exoopt la dirección origen y destino en hl y de respectivamente? No he visto esa información.

¡Saludos!

P.S.: Mañana intentaré hacerme un cargador para probar las rutinas.
Tienes razón, ¿Qué os parece algo como esto?

Código: Seleccionar todo


exoopt v1.03, Metalbrain/Antonio Villena, 27 Jan 2013

exoopt <file1> <file2> .. <fileN> <table_address> [<type>]

<file1..N> Origin files
<table_address> Hexadecimal address for the temporal 156 bytes table
<type> Target decruncher

All params except <type> are mandatory, <type> param is optional.
<type> values are: f0, f1, f2, f3, b0, b1, b2 and b3. Default is f0.
Every input file will be compressed in a .opt output file
It will generate the decruncher into the file d.asm

Valid input files must be generated with next exomizer params:
exomizer raw <ifile> -o <ofile>
exomizer raw <ifile> -c -o <ofile>
exomizer raw <ifile> -b -r -o <ofile>
exomizer raw <ifile> -b -r -c -o <ofile>
La dirección de origen y destino no hacen falta para generar el código en d.asm. Estos parámetros se usan en tiempo de ejecución; así es posible llamar a la misma rutina varias veces con diferentes bloques comprimidos. La dirección de la tabla es un caso distinto porque es fija. Creo que en algunas de las versiones oficiales se puede hacer un simple cambio para que no sea fija y venga indicada por el registro iy, pero no lo hacemos así porque sólo sería necesario en un caso muy rebuscado.
Aparte de eso hay que corregir otro problema. En la ayuda pone "<file1> <file2> .. <fileN> <output_file> <table_address> [<type>]", y el parámetro <output_file> ya no existe.
Ya lo he corregido, gracias. En la nueva versión también está arreglado el fallo del cuelgue.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Sab 09 Feb , 2013 11:27 pm

¡Hola de nuevo!

Hoy me puse a trastear para agregar carga y descompresión en el juego que ando haciendo y me he encontrado conque no logro conseguir la descompresión correctamente. No importa si uso el exoopt o no. A veces obtengo un cuelgue y a veces no aunque me sobreescribe otra área de memoria aparte de donde deberían ir los datos descomprimidos. La rutina que estoy usando es la que está en deexo_b.asm.
La forma en que comprimo con exomizer es pasándole los parámetros raw -b -r -c. Aunque da igual como lo haga (siempre con -b) no he conseguido hacerlo funcionar.
Estoy en, ¡como no!, un cpc464.
Como estoy usando el SDCC he embebido la rutina dentro de una función en C y como no estaba seguro del punto de retorno de la misma (creo que se sale por dos sitios, ¿cierto?) antes del código de la rutina descompresora tengo hecho esto:

uncomprime(void* src, void* dst){
ld l, 4(ix) ; HL = src
ld h, 5(ix)
ld e, 6(ix) ; DE = dst
ld d, 7(ix)

call deexo
jp exoend
.
.
.
código del deexo
.
.
.
exoend:
__endasm;
}


He incluso probado a cambiar el buffer por uno alineado a 256 bytes en la memoria pero con el mismo resultado.
Lo que estoy haciendo es cargar los datos comprimidos en la dirección de pantalla desde disco en la memoria de pantalla. Inmediatamente after y por supuesto sin pintar nada llamo a la descompresión. Como dije hay veces que se cuelga y hay veces que sigue luego por donde iba pero me sobreescribe algunos bytes por debajo de la dirección de destino que le pongo.

¿Alguna idea?



P.S.: :'( <===== YO

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 10 Feb , 2013 12:29 am

Hola pacomix

Pues no sé, pásame el SNA o el CDT que falla y te lo miro.

Edito: Por cierto, te recomiendo las versiones optimizadas. Son más rápidas y ocupan menos.

pacomix
Forum Addict
Forum Addict
Mensajes: 460
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Dom 10 Feb , 2013 12:49 am

¡Hola! Muchas gracias por contestar.

El descompresor que estoy usando es el que está ubicado en rawdecrs\z80\deexo_b.asm en la versión 2.05 de Exomizer.
Ya que te tomas la molestia no considero que se elegante que te pase todo el .sna y te líes a debugear. ¿No sería mejor pasarte los datos exomizados y los intentes descomprimir? Supongo que tendrás algún proyecto para probarlos. Si prefieres el sna (o el dsk) dímelo mejor así, te busco los puntos de entrada a deexo y te los paso.
Por cierto... ¿cómo te envío un archivo por aquí?

¡Saludos!

antoniovillena
Forero habitual
Forero habitual
Mensajes: 115
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 10 Feb , 2013 1:02 am

Si me puedes pasar ambas cosas, pues mejor. Primero empaquétalos en un zip. Si tienes una cuenta en dropbox, mega o similar súbelo y pones aquí el link. Si no, envíame un privado, te paso mi dirección de email y me lo envías por correo.


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic