Comando usado para comprimir con exomizer 2.05:
exomizer raw -b -r -c c:\amstrad\sources\011-CompScr\data\fback.bin -o c:\amstrad\sources\011-CompScr\data\FBACK.EXO
Comando usado para exoopt:
exoopt c:\amstrad\sources\011-CompScr\data\fback.exo 0x1000 b3
El fichero descomprimido es una captura de pantalla de 16384 bytes.
La rutina que he usado es la deexo_b_simple.asm adaptada para ser usada dentro de una función de SDCC. La puedes encontrar adjunta.
El código tiene la pila configurada en 0x0FFF y el main empieza en 0x06D9.
El punto de entrada a la función de descompresión está en 0x0138.
La función de descompresión está modificada de modo que el buffer apunta a 0x1000. Ahí tengo definido un array de 256 bytes.
El main:
- Configura el CRTC para el modo que uso (128x240) y pantalla de 32KB (aunque esto no es estrictamente necesario).
- Carga el fichero sin comprimir en el área de memoria de la pantalla (0x8000) y luego la borra. Esto es para ver que todo funciona bien.
- Carga el fichero optimizado con exoopt en memoria en 0x5000 (tiene 0x15D5 bytes) y lo intenta descomprimir en 0x8000.
- A la función le paso 0x8000 como dirección de destino a descomprimir.
- Aún pasándole ambos valores empezando por el último byte no funciona.
- Pasándole 0x5000 como dirección de comienzo de los datos comprimidos y 0xBFFF como dirección de destino obtengo algo en pantalla pero es basurilla.
- Luego entra en un bucle infinito.
Todo lo que se pinta entre 0x8000 y 0xBFFF son datos que se verían en pantalla. He intentado seguir la rutina de descompresión pero me es demasiado complicado entenderla bien. Ahí tu dominas.
En el .dsk hay otro fichero exomizado pero sin pasar por el exoopt y obtengo los mismos resultados con él.
El código ensamblador lo tuve que adaptar para que me compilase bien con el SDCC. Para las direcciones de memoria y números se usa la almohadilla #
seguida del número. Si el número va precedido con 0x se considera hexadecimal, de lo contrario se considera decimal.
¡Saludos y muchas gracias!
- deexo.zip
- deexo
- (17.68 KiB) Descargado 95 veces