Buenas a todos. Unos 14 meses después de mi último empaquetado, hoy quería presentaros mi edición del
Arkanoid, arcade de Taito convertida al Commodore 64 y otros equipos de 8 bits por la compañía Imagine en 1987, y que incorpora una de las primeras bandas sonoras que usaban samples digitalizados, compuesta por el afamado Tim Follin, uno de mis músicos multiplataforma favoritos. Un usuario de RW me lo había sugerido y estos días me dio por echarle un vistazo; primero miré la cinta, pero dejaba mucha basura, comprimía peor y al final usé la versión en disquette.
En todo este tiempo, algunos desarrolladores han programado nuevas versiones de aPLib en
código abierto, que mejoran ampliamente el resultado de la librería propietaria original de su creador Jørgen Ibsen. Se han venido usando en la escena del Amstrad CPC en el último año, y llevaba algún tiempo queriendo probarlas. Todo empezó en 2019 con el compresor CAP de Sven-Åke Dahl y el APC optimizado por Spke, que utilicé en juegos anteriores recientemente. Después en 2020, el programador Emmanuel Marty del proyecto LZSA (otro compresor) lanzó la herramienta
apultra que arañaba bastantes bytes más gracias a avances en una librería de concordancia de patrones. La versión actual de apultra es la 1.4.7 y Marty ha lanzado unas 25 versiones en año y medio, mejorando la velocidad de compresión en cada una de ellas y a diferencia del CAP/APC permite comprimir más de 64 KB para proyectos de micros de 16+ bits.
En febrero de este año 2022, Sven-Åke Dahl lanzó la versión CAP 1.3 que aparte de mejorar su compresión a valores similares a los de apultra, incorpora una nueva opción para crear ejecutables autodescomprimibles en Commodore 64. Es útil para hacer pruebas rápidas, pero sin embargo la rutina de descompresión elegida está optimizada para tamaño en vez de velocidad, al no tener sus bucles desenrollados, y es similar a mis pruebas originales de hace 5 años que quedaron descartadas con la rutina descompresora de Antonio Villena. Está programado en .NET C# y su página de GitHub no ofrece ejecutables; a la hora de intentar compilarlo, me creó multitud de DLLs asociadas o un EXE sólido independiente de 66 MB... no sé si elegí mal las opciones de compilación, pero el tamaño me parece absurdo.
Edito: Teniendo instalado el .NET Runtime 6.0.6, he forzado a tirar del .NET 6 en vez del .NET 3 y hoy he recompilado con:
dotnet publish -c release -r win-x64 --no-self-contained /p:PublishSingleFile=true y ahora el CAP 1.3 me ocupa 230 KB
Otro proyecto interesante es el Optimal aPLib compressor
oapack de Eugene Larchenko, que mediante fuerza bruta calcula absolutamente
todas las combinaciones de patrones y ofrece la definitiva, pero a costa de convertirla en la herramienta más lenta (un par de minutos para comprimir 64 KB en un AMD Ryzen a 4200 MHz) y necesitar ingentes cantidades de memoria. En mis pruebas con el Arkanoid, los 64504 bytes originales del juego, quedaron en 27386 bytes con la librería original, 26738 bytes con el APC de Spke, 26701 bytes con apultra, 26700 bytes con CAP 1.3 y
26699 bytes con la fuerza bruta de oapack, aún a riesgo de necesitar ¡20 GB de RAM!... Es complicado arañar un par de bytes, pero con
107 bloques es la versión más corta que conozco. Exomizer 3.1.0 proporcionaba 26705 bytes en "modo raw" para un tiempo de descompresión porcentualmente superior.
Como siempre en todos mis empaquetados, si los pruebas en un C128 descomprimen el doble de rápido a 2 MHz