Les compacteurs sur CPC

T&J du GPA (c) 10/17/07, maj le 17/01/08 !


Ce texte à l'origine correspond à une section de l'article sur la mémoire vive des CPC, publié (si si !) dans un ancien numéro d'Another World. Grim ayant exhumé des compacteurs de la logithèque de Tronic, et ayant moi-même sorti de l'ombre deux compacteurs issus de scènes alternatives (C64 et MSX), je me suis dit qu'il serait intéressant de faire le point sur les logiciels existants à l'heure actuelle sur notre brave Arnold.

Depuis la première version de ce texte, de nouveaux compacteurs sont sortis du néant. Comme Pucrunch et Bitbuster, il s'agit de Cross-crunchers (compacteur sur PC, routine de décompactage sur CPC ou tout autre machine préhistorique). Acceuillons donc "Exomizer 2" et "Aplib Z80".

C'est quoi un compacteur ?

Tout simplement un utilitaire capable de réduire la taille d'un programme sans l'altérer. Un programme compacté est plus "petit", et toujours exécutable. Le but principal de ce traitement est de gagner de la place sur un support de stockage (disquette ou cassette ) et d'accélérer le chargement du programme.

Plus anecdotiquement, le compactage est aussi indiqué lorsque l'on veut utiliser des chargeurs Basic pour des jeux commerciaux utilisant 'le bas' de la mémoire du CPC (ex : "Rambo" est implanté en &0040).

On distinguera le compacteur de l'archiveur (type PKZIP), qui lui ne permet pas d'exécuter directement le fichier compressé qu'il créé. Cet autre type de programme existe aussi sur CPC (Space Archiver d'Antoine, Bolloware cruncher 1.0), mais n'entre pas dans le cadre de ce texte.


Les logiciels existants

Nous allons en faire ici un petit panorama en indiquant les avantages et défauts des programes (le .x indique qu'il existe plusieurs versions du produit). Les produits sont tous des freeware, à l'exception de Zenith 1 et 2 , publiés en des temps anciens par Esat Software.

  • Aplib (Jorgen Ibsen & CNGSoft)
    Aplib n'est pas un logiciel mais une librairie de routines de compression/décompression, utilisables dans des logiciels commerciaux actuels moyennant finance ( http://ibsensoftware.com/products_aPLib.html). Pour une utilisation non commerciale, l'usage des outils de compression (sur PC) est gratuit. Le site ne fournit pas de routine de décompactage Z80, mais CNGSOFT en a créé une en 2006 et l'a diffusée sur son blog.
    Le source n'étant pas utilisable directement sous Maxam, je l'ai remis en forme sans changer son contenu. Allez en section "routines" pour le récupérer. D'un point de vue performance, ce programme se classe dans les meileurs, et la routine de décompactage est plutôt rapide et très compacte (160 octets pour la routine de CNGsoft, 179 pour celle du source Maxam avec passage de paramètres. Le meilleur cruncher disponible actuellement avec Exomizer.

  • Bitbuster 1.2 (Team Bomba)
    Ce programme n'est pas un compacteur CPC ! A l'origine, il a été développé pour un jeu MSX 2, Bombaman ! Bitbuster nécessite l'usage d'un PC pour la partie compactage. Le programme binaire créé peut être ensuite transféré sur CPC et décompacté avec la routine adéquate. Etrangement, comme pour PUCRUNCH, peu de personnes du monde Amstrad semblent au courant de l'existence de cet excellent compacteur ! Ses performances sont a peu de chose près équivalente à PUCRUNCH, mais sa routine de décompactage est plus compacte et plus rapide.

  • Cheese cruncher 1.x/2.x (Antoine)
    Un compacteur efficace dans la plupart des cas et très populaire à sa sortie. Il a quand même quelques défauts : il ne supporte pas les très gros fichiers (taille maximum &9593); les exécutables génerés s'implantent systématiquement en 'haut' de la ram (et plantent le CPC lorsqu'on les chargent avec un Hacker !), ce qui n'est guère pratique en cas de compactages multiples, et enfin, certains émulateurs CPC (CPCEMU) ne le supportent pas. Si l'on cherche la performance à tout prix sur un CPC, on lui préférera CPCT 3.0.

  • Columbia 1.x (Crtc)
    Un logiciel anglais, qui tient à la fois du compacteur et de l'archiveur. Avec Columbia, il est possible de traiter des fichiers exécutables, mais aussi n'importe quel fichier. Dans ce dernier cas, le programme se comporte comme un archiveur. Avant de pouvoir utiliser un fichier archive, il faudra au préalable le décompacter avec Columbia. Du côté des performances, cet utilitaire est correct, mais a ses limites. Il nécessite obligatoirement une zone de travail d'environ 13ko, que l'on peut heureusement implanter à peu pres où l'on veut en mémoire, et, plus grave, il est très lent au décompactage (pire que le Turbo Imploder !). Particularité typiquement anglaise, il existe une version cassette de Columbia !

  • Compact (Xavier Brysbaert)
    Programme paru dans un numéro de Amstar & CPC. Il s'agit d'un compacteur utilisant la même technique que Zenith. On ne peut donc pas en attendre des performances éclatantes. Sa seule particularité réside dans le fait que le programme compacté est implanté au même endroit en mémoire que sa source.

  • CPCT 1.0/2.0/3.0 (Madram)
    La version 1.0 utilise un système de compactage inédit sur CPC. Interêt de la chose, on peut gagner de la place sur un programme déjà compacté. Le temps de traitement est correct, bien meilleur que le Crown Cruncher. Il peut traiter de gros fichiers (max : &A6BC).

    La version 2.0 apporte une méthode de compactage plus classique, se déclinant en une version simple (1) et étendue (2). Ce logiciel se classe d'emblée parmi les meilleurs en terme de qualité de compression. Mais, cette version en développement est malheureusement outrageusement lente au compactage (mode étendue), et plante parfois.

    CPCT 3.0 marque une rupture avec les crunchers existants. D'abord parce qu'il propose plusieurs "méthodes" de recherche pour optimiser le compactage (utilisation d'un dictionnaire plus ou moins gros). Ensuite, parce qu'il se présente sous la forme d'une RSX ! Au premier lancement, c'est un peu déstabilisant, mais c'est finalement très pratique. Les performances sont excellentes, on peut juste reprocher à CPCT un temps de traitement plombé par la dernière méthode de compactage, qui, la plupart du temps, n'apporte rien en terme de gain. Il arrive également rarement que le programme se plante.

    CPCT 3.0 est presque le compacteur parfait sur Amstrad, il ne lui manque que la possibilité de désactiver la recherche de type 4 ! A noter qu'il nécessite 128ko de mémoire.

  • Crown cruncher 1.x (Crown of Beng!)
    Ce compacteur utilise la technique de substitutions de chaines de caractères. Même si le temps de compactage est très long, le résultat est honorable, mais moins bon que Cheese ou CPCT 3.0. Le principal avantage de ce logiciel, c'est qu'il peut compacter de très gros fichiers (zone RAM entre &40 et &AA80 !). De plus, la routine de décompactage n'occupe qu'un espace mémoire restreint (&130) et s'implante systématiquement au dessus de la fin du fichier non compacté.

    C'est mon compacteur préféré pour réduire la taille des jeux commerciaux, même si ses performances sont moyennes.

  • Exomizer 2 ( Magnus Lind & Metalbrain)
    Un compacteur créé à l'origine pour des machines à processeurs 6502 (Commodore, Atari). Comme tous les compacteurs réçents, il s'agit en fait d'un cross-cruncher. Le compactage se fait sur une machine puissante (PC ou Amiga), à charge aux utilisateurs avertis de trouver une routine de décompactage adaptée pour leur ordinateur.
    Un programmeur espagnol de la scène Spectrum, MetalBrain s'est chargé du port Z80 de cette routine, et cela fonctionne parfaitement sur CPC !
    Par rapport aux autres compacteurs, Exomizer se distingue par ses très bonnes capacités (meilleur taux de compression à ce jour). La routine de decrunching est raisonnablement rapide mais nécessite en fonction de la version utilisée un buffer de 156 ou 256 octets. Elle reste malgré tout assez compacte (longueur &167 pour mon source Maxam).

  • Mega cruncher 1.0 (BMC of CBS!)
    Un compacteur allemand en anglais, utilisant la même technique que Zenith (codage RLE). On ne s'étonnera pas de constater que ses performances sont similaires donc assez médiocres. La présentation est sobre. On a malheureusement la désagréable impression que ce programme n'est pas "terminé". Pour preuve, à la fin du compacteur, la longueur du nouveau fichier n'est pas affichée à l'écran, alors qu'il y a un beau texte "NEW LENGHT : &". De plus, lors des tests de compactage, ce programme s'est planté. Un compacteur dépassé.

  • PuCrunch (Pasi Ojala)
    Ce programme n'est pas un compacteur CPC ! A l'origine, il a été développé par un programmeur C64 sur PC. Le programme génère a la demande un exécutable pour les différents modèles 8bits Commodore, mais peut aussi produire un fichier sans décompresseur. Là où cela devient intéressant, c'est que des versions Z80 de la routine de décompactage ont été faites par differents programmeurs. Le résultat est tout simplement étonnant, et enfonce tout ce qui existe sur Amstrad en terme de performance pure ! Par contre, il n'est pas particulierement "friendly", il n'existe pour l'instant sur CPC que la routine de décompactage (disponible sur ce site !).

  • Richard Aplin's cruncher
    Le compacteur d'un programmeur CPC très connu, ayant en particulier réalisé la version anglaise de Double Dragon. Il s'agit plus d'une routine personnelle que d'un veritable programme, ce qui explique sa relative difficulté d'utilisation par rapport à ses concurrents (il ne permet pas par exemple d'intégrer dans le fichier final la routine de décompactage) et certaines limitations au niveau de la taille maximale compactable. Plus gênant, il a tendance à planter dès qu'on lui "enfourne" du code un tant soit peu complexe ou déjà compacté. C'est d'autant plus dommage qu'il est rapide et que son taux de compression est bon. La routine de décompactage est par contre lente.
    Un programme à conserver plus à titre historique qu'autre chose, en fait...

  • Turbo Cruncher (Elmsoft)
    Programme publié dans la revue allemande CPC International. Il a pour principale caractéristique le fait de compacter en faisant du bruit ! Il ne supporte pas les fichiers de plus de &8500 octets (limitation dûe au fait qu'il est écrit partiellement en Basic). Le taux de compactage est appréciable, meilleur que le Crown Cruncher.

    Un compacteur intéressant même s'il est un peu plus 'rustique' à utiliser que les autres. Je m'en sers souvent pour compacter des pages écrans de jeux.
    A noter qu'une nouvelle version de Turbo Cruncher est sortie en 2003 (made in GPA !). Elle est françisée et donne des explications détaillées sur la façon d'utiliser la routine de décompactage.

  • Turbo Imploder 1.1 (Crown of Beng!)
    Autre logiciel allemand, basé sur le compacteur de Richard Aplin, il a des caractéristiques assez originales. Il peut traiter des programmes Basic, il est très rapide au compactage et presque aussi efficace que le Crown cruncher. Mais il présente des défauts :

  • - Sur la version 1.1, les fichiers Basic compactés plantent sur CPC plus s'ils sont exécutés directement. Une version patchée est disponible sur le site, corrigeant ce problème.
  • - Certains gros fichiers ne peuvent être compactés (message Buffer overflow) même si leur taille est largement inférieure a &A000, limite théorique du programme.
  • - Le décompactage est beaucoup plus lent que les autres logiciels. Cela n'a l'air de rien, mais c'est assez oripilant. Un compacteur, à moins de présenter une efficacité monstrueuse, se doit d'avoir une routine de décompression rapide.
  • - Pour en finir, il utilise un buffer fixe en &A735, ce qui peut altérer du code dans cette zone.

  • Zenith 1 et 2 (Esat software)
    Les deux premiers compacteurs sur CPC ! Il s'agit de programmes commerciaux. Reposant sur la technique de codage des suites d'octets de même valeur, ils ne sont pas très performants. lls ont pourtant été utilisé fort longtemps, aucun autre produit n'existant alors. Zenith 1 et 2 peuvent indifférement compacter des programmes ou des pages de présentation 17ko.
    A réserver aux nostalgiques !


    Mesure des performances des compacteurs

    On termine ce panorama avec un petit test grandeur nature sur deux fichiers binaires. Le premier est de taille moyenne, il s'agit du jeu Boulder Dash. Le deuxième est plus gros, sans pour autant atteindre une taille critique pour la majorité des compacteurs, il s'agit du fichier principal de Ghosts'n'goblins.

    Chaque fichier compacte a ensuite été testé. S'il a planté (eh oui, c'est arrivé !), cela est signalé dans le tableau.

    Pour Exomizer 2, Pucrunch, BitBuster, les valeurs indiquées tiennent compte de la routine de décompression et de ses éventuels buffers (&B3 pour Aplib Z80, &167 pour Exomizer 2, &1D0 pour PUCRUNCH, &C0 pour Bitbuster).

    Boulder Dash Taille Ko sur disque Implantation Execution
    Original &7025 29ko &0200 &1F52
    Aplib Z80 &2C20 12ko variable variable
    BitBuster 1.2 &2E78 12ko variable variable
    Cheese 2.2 &37E6 15ko &6F1A &6F1A
    Columbia 1.0 &3F2B 16ko &62C5 &A048
    Compact &53F9 22ko &0200 &0200
    CPCT 1.0 &533F 21ko &2353 &75C8
    CPCT 2.0 &3AE6 15ko &3CC0 &772C
    CPCT 3.0 &342B (4) 14ko &3E93 &7227
    Crown cruncher &41F5 17ko &31B8 &7300
    Exomizer 2 Z80 (standard) &2C3C 11ko variable variable
    Mega cruncher &53B8 22ko &0200 &0200
    PuCrunch &2EDC 12ko variable variable
    Richard Applin's cruncher crash - - -
    Turbo cruncher &3989 15ko variable variable
    Turbo imploder &466A 18ko &2CB4 &2CB4
    Zenith &53AF 22ko &0040 &5384
    Zenith 2 &5149 21ko &0140 &5236

    G'n'G Taille Ko sur disque Implantation Execution
    Original &8E00 36ko &1800 &5000
    Aplib Z80 &4E46 20ko variable variable
    BitBuster 1.2 &5226 21ko variable variable
    Cheese 2.2 &6290 25ko &4470 &4470
    Columbia 1.0 &6D8A 28ko &3466 &A048 crash !
    Compact &80B3 33ko &1800 &1800
    CPCT 1.0 &798B 31ko &2D71 &2D71
    CPCT 2.0 &673B (1) 26ko &488B &AF4C
    CPCT 3.0 &5EF3 (3) 24ko &0040 &0040
    Crown cruncher &69D2 27ko &3D5B &A680
    Exomizer 2 Z80 (standard) &4E0C 20ko variable variable
    Mega cruncher crash - - -
    PuCrunch &519C 21ko variable variable
    Richard Applin's cruncher Trop gros - - -
    Turbo cruncher Trop gros - - -
    Turbo imploder Buffer overflow - - -
    Zenith &806D 33ko &0040 &0040
    Zenith 2 &7EB3 32ko &0140 &7FA0

    CPCT 3.0 a généré avec la méthode 4 un fichier compacté corrompu.
    A noter que les fichiers compactés par CPCT 2.0 et Crown Cruncher doivent être relogés pour se charger correctement.


    En conclusion ?

    Si vous recherchez la performance à tout prix, AplibZ80, Exomizer, Pucrunch ou Bitbuster 1.2 sont pour l'instant la meilleure solution, même si vous devez pour cela passer par l'assemblage d'un source (pas bien méchant à faire) et confier le compactage à un PC.
    Si vous n'avez pas de PC à la maison, mais seulement un CPC, ou si vous n'avez pas le nécessaire pour faire des transferts de fichier, CPCT 3.0 est le meilleur choix.
    Si vous compactez sur CPC de très gros fichiers, le Crown cruncher, malgré son temps de compactage prohibitif et ses performances moyennes, est une valeur sûre (ne plante jamais !).