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
antoniovillena
Forero habitual
Forero habitual
Mensajes: 113
Registrado: Mar 26 Abr , 2011 9:25 pm

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Sab 11 Oct , 2014 8:00 pm

Básicamente hay 2 formas de usar exomizer, la oficial y la optimizada. La optimizada es por si necesitas mayor velocidad o un descompresor un poco más pequeño, las instrucciones de ésta las tienes aquí.

http://retrolandia.net/foro/showthread. ... 285#pid285

La oficial es la que te descargas de esta web (ahora parece caída):

http://hem.bredband.net/magli143/exo/

Existen 4 archivos en ensamblador: deexo.asm, deexo_b.asm, deexo_simple.asm y deexo_simple_b.asm. La línea de comandos a ejecutar según el archivo es la siguiente:

Código: Seleccionar todo

deexo.asm           exomizer raw <input> -o <output>
deexo_simple.asm    exomizer raw <input> -c -o <output>
deexo_b.asm         exomizer raw <input> -b -o <output>
deexo_simple_b.asm  exomizer raw <input> -b -c -o <output>


La versión simple ocupa menos, pero por contra te obliga a ubicar la tabla en múltiplos de página y no admite literales (los literales sólo mejoran la compresión un poco y en casos muy aislados). La versión backwards (_b) es un poco más rápida que la normal y requiere cargar los parámetros de entrada apuntando al último byte en lugar de al primero.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 5858
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Exomizer 2, rutinas actualizadas

Mensajepor MiguelSky » Dom 12 Oct , 2014 10:37 am

Gracias, Antonio :), el hilo de retrolandia.net me ha enseñado a aclarar un poco el tema de las versiones, que con tanta versión te pierdes.

Pero el problema lo tengo trabajando con ficheros de cierto tamaño: una pantalla sí soy capaz de descomprimirla, tengo espacio de sobra, pero el problema lo tengo para hacerlo con un archivo de 20 kb, como en el ejemplo del Boulder Dash que indico más arriba. Incluso siguiendo los pasos del tuto (algunos tamaño no me coinciden con los que se indican) no me va. Supongo que debo malinterpretar alguna cosa, pero por más vueltas que le doy no lo veo...

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 12 Oct , 2014 11:51 am

Pues no sé, pueden ser muchas cosas. Si quieres envíame los archivos en cuestión para que les eche un vistazo, si el proyecto es top secret lo puedes hacer por privado.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 5858
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Exomizer 2, rutinas actualizadas

Mensajepor MiguelSky » Dom 12 Oct , 2014 2:11 pm

Bueno, adjunto el dsk de Boulder Dash de CPC-Power (29Kb). Acabo de notar que a pesar de hacer los cálculo para dirección de inicio y tal, lo descomprime en la memoria de pantalla, que por otro lado a él le cabe, pero a mí me sale un archivo algo más grande (20 Kb) y no me entraría en esa zona de la memoria.
Adjuntos
Boulder Dash (UK) (1985) [Original].zip
(31.4 KiB) Descargado 35 veces

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Dom 12 Oct , 2014 3:16 pm

A ver con este archivo no puedo ayudarte. Necesito ver el código fuente que te da el error.

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Lun 13 Oct , 2014 11:54 am

MiguelSky, ¿en qué lenguaje estás programando?. Tuve un problema cuando implementé el exomizer en mi juego al usar SDCC que no era sencillo de identificar.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 5858
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Exomizer 2, rutinas actualizadas

Mensajepor MiguelSky » Lun 13 Oct , 2014 12:48 pm

Gracias por las respuestas, Antonio y pacomix. Las pruebas las estoy haciendo en ensamblador. Mi problema es que debo calcular mal la dirección donde alojar mi archivo comprimido en el caso de que su espacio se solape con el del archivo descomprimido. Los cálculos los estoy haciendo tal cual lo hace en el tuto que indico de cpcwiki (ellos hacen trampa, alojan el archivo comprimido en la memoria de pantalla a pesar de calcular la dirección donde debería ir porque su comprimido es menor de 16 kb). Podéis usar de prueba el archivo que he adjuntado: una vez comprimido ocupa 20 kb.

Os cuento lo que hago: tras "exomizar" :D mi archivo pasa de 28709 bytes a 19510. Usando las cábalas que se indican en el tuto, 512 (&200, dirección de inicio) + 28709 (longitud del archivo descomprimido) -1 = 29220 + 5 (safety offset) = 29225 dirección final que ocupará en memoria el juego una vez descomprimido.

29225 - 19510 + 1 = 9711 dirección de inicio del archivo comprimido, que es la que le indico al inyectar el archivo en el disco.

Ensamblo en &8000 (por ejemplo) el cargador y tras él deexo.asm:

load_file:
ld hl,filename ;HL = file name address
ld de,&25EF ;(9711) DE = start address to load file to
ld b,12 ;B = length of file name
call &bc77 ;Open the file header


ex de,hl ;Now HL = start address
push hl ;Store it
call &bc83 ;Load the file
call &bc7a ;Close the file

decompress_file:
pop hl ;HL = start address of compressed file
ld de,&0200 ;DE = start address of decompressed data
call deexo ;Decompress the data

start_game:
jp &1f52 ;Start the game

filename:
db "BOULDERC.BIN" ;Name of file containing compressed data

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor pacomix » Lun 13 Oct , 2014 1:08 pm

Yo por seguridad y por probar simplemente pondría la dirección de carga del archivo comprimido bastante más arriba con cuidado de que no pise el código.
También te recomendaría pasar olímpicamente de las rutinas de carga del firmware ya que necesitas tener el firmware activo con la consecuente reducción de memoria disponible para nuestras cositas. Si quieres te puedo pasar una rutina de carga de ficheros con cabeceras AMSDOS y la de exomizer que tenía implementadas para el CPC-Bros aunque uso la versión backwards simple de exomizer.

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Lun 13 Oct , 2014 5:22 pm

No veo nada malo en el código, supongo que mientras descomprimes tienes las interrupciones deshabilitadas. Me gustaría que hicieras lo siguiente:

  • Pones un punto de ruptura justo antes de ejecutar call deexo
  • Guardas el snapshot en dicho punto de ruptura
  • Con un editor hexadecimal compruebas que el stream comprimido coincide con archivo comprimido.
  • Compruebas también que no se ha corrompido el compresor en sí, ni la tabla de descompresión.
  • Si el error permite volver de la llamada, compruebas también el stream comprimido hasta qué punto se ha descomprimido bien.

Si has comprobado todo lo anterior y no encuentras el fallo, pásame el .SNA correspondiente (justo antes del call) y le echo un vistazo.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 5858
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Exomizer 2, rutinas actualizadas

Mensajepor MiguelSky » Mié 15 Oct , 2014 12:50 am

Chicos, estaba todo bien... excepto el archivo: como bien me ha apuntado Urusergi estaba usando un archivo Binario Protegido sin percatarme ](*,) Ya me rula todo y prometo que lo utilizaré :D

Muchas gracias por vuestra ayuda y consejos :)

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

Re: Exomizer 2, rutinas actualizadas

Mensajepor antoniovillena » Mié 15 Oct , 2014 12:56 am

De nada, me alegro de que hayas podido arreglarlo.

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 » Mar 04 Oct , 2016 6:37 pm

Hola a todos,

Acabamos de hacer una pequeña nueva release. El código no ha cambiado nada, pero tras ser consultado un par de veces sobre la licencia de las rutinas de descompresión, he decidido licenciarlas bajo la LGPL 2.1 . Los archivos actualizados y la licencia la podeis encontrar aquí:

https://sourceforge.net/p/emuscriptoria ... ree/deexo/

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 5858
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Exomizer 2, rutinas actualizadas

Mensajepor MiguelSky » Mar 04 Oct , 2016 8:52 pm

Muy buen trabajo, chicos <rX


Volver a “Ensamblador”

¿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 El portal del CPC Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) El sitio del Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic