Des étoiles plein les yeux !

Des étoiles plein les yeux !
VC³ 2023

Dernièrement, à l’issue d’une cérémonie de trolling durant laquelle j’ai lancé la démo DSC#4, j’ai terminé mon incantation par un « We miss Overflow! » afin d’invoquer une légende oubliée.

Pouf ! Quelle joie de voir apparaitre dans mon salon celui qui a souvent porté haut les couleurs du groupe Logon System:

Pouf!

En guise d’apéritif, et pour voir ce qu’il restait de ses neurones légendaires, nous avons croisé le fer sur le sympathique défi de noël de Logiker, qui consiste à afficher un motif choisi constitué de plusieurs caractères « étoile » avec un code occupant le moins d’octets possibles. En 2023, il s'agissait de losanges:

🞜 Vintage Computing Christmas Challenge (VC³) 2023 🞜 - Logiker
🞜 Vintage Computing Christmas Challenge (VC³) 2023 🞜. Vintage Computing - Textart - Compos

Le défi est ouvert à toutes les machines (de la plus ancienne à la plus récente).

Évidemment, certaines plateformes sont plus avantagées que d’autres pour l’exercice, mais l’objectif, c’est surtout de participer !

...

La vache ! Il est loin d’avoir perdu la main en Z80A, l’animal de légende ! J’ai souffert pour atteindre son score mais je ne pouvais pas le laisser me piétiner ainsi avec son score insolent !

L’exercice est intéressant dans la mesure où on peut trouver de très nombreuses solutions pour résoudre un problème donné. Certaines solutions peuvent se terminer en impasse dès qu’il semble impossible d’optimiser davantage le code, et il faut alors remettre le sujet sur la table plusieurs fois et avoir des approches variées, voire farfelues.

Une des difficultés de l'exercice pour moi a été de basculer du raisonnement en mode "CPU-only" (en terme de vitesse d'exécution) au mode "SIZE-only" (en terme de place). Lorsqu'il n'y a pas de compromis à faire sur la vitesse, on peut sans vergogne utiliser des instructions gourmandes en CPU mais courtes en taille, et même afficher 256 fois le même caractère si ça permet de simplifier un test.

Je pensais, avant que nous échangions nos solutions, que nous étions arrivés au même code. Or nos solutions étaient finalement assez différentes. De quoi rappeler qu'il faut rester humble devant un CALL #BB5A.

Chacun y était cependant allé de ses petits trucs barbares et qui ne respectent pas la convention de Genève. Je publie ci-dessous les 2 solutions (bon, je ne comprends déjà plus ce que j’ai écrit).

A partir de là, nous avons travaillé ensemble pour tirer le meilleur parti des 2 solutions afin de fièrement gratter 1 misérable octet.

Longshot / Overflow

 Finalement, le meilleur score sur CPC a été atteint par... Nesu, qui est parvenu à 27 octets.

Grands bravos à lui! (note : faire ce billet en anglais !)

En étudiant le code du vainqueur sur CPC, nous avons remarqué qu’il est admis dans les règles de pouvoir lancer la démo via un « load » suivi d’un « call ».

🖥️
Sur CPC, lorsqu'un exécutable est lancé via l'instruction "run", comme nous l'avions fait, le programme ne peut pas revenir au basic avec un simple "ret" en Z80A sans crasher le CPC. Un "ret" rend la main proprement lorsqu'il est appelé avec l'instruction basic "call". Avec un "run" le code doit "boucler" lorsqu'il a fini son job, ou "recommencer" à dessiner le motif à l'infini, ce qui est couteux en taille. Un "call" offre un second avantage non négligeable, car son argument (l'adresse à appeler) devient alors disponible dans deux registres 8 bits du Z80A. C'est une manière de passer un "paramètre" au code, et donc de gagner de la place. Il est ainsi possible de récupérer le code ascii du caractère "*" en mettant son code ascii comme poids faible (ou fort) de l'adresse. Cette possibilité était indiquée dans les petites lignes du règlement...

C’est bon à savoir pour ceux qui essaieront l’exercice pour noël 2024. Cette petite précision permet de descendre notre solution commune à 25 octets :

The Vintage Computing Christmas Challenge 2023 - Page 3
The Vintage Computing Christmas Challenge 2023 - Page 3

Il y a donc de l'espoir que le CPC puisse approcher le podium face à ce maudit ZX SPECTRUM (Bravo à Art Top !!).

Même si....l'important, c'est bien sûr de participer.

Longshot / Logon System