Vomitiks #06 : Mauvais ?

Vomitiks #06 : Mauvais ?

L'article présent dans 64NOP numéro 2, pages 36 à 38, est classé dans une catégorie "polémique". On se demanderait presque pourquoi...

🙄
Bullshit : L'auteur essaie de nouveau de faire croire qu'une technique décrite dans le Compendium est compliquée et peu exploitable (décidément...)
💬
"Halte au fake news ! Il n'existe pas jusqu'à présent de façon simple de faire disparaitre l'artefact de border situé à la fin d'une ligne sur CRTC 0, et qui se révèle surtout gênant quand on exploite la rupture verticale." (Hicks / 64NOPs 2, page 37)

L'auteur livre de nouveau une vision à spectre large de ce qui est facile et de ce qui ne l'est pas. Pour faire disparaitre l'octet de border situé à la fin d'une ligne sur le CRTC 0, il est seulement nécessaire d'écrire trois instructions au bon moment, ce qui est donc simple et très loin d'être insurmontable pour un programmeur CPC, surtout si ce dernier prétend être capable de faire de "petites RVI" sur CRTC 2.

⚠️
Techniquement, il s'agit de faire 3 OUTs en Z80A: Un pour la sélection du registre CRTC R8, puis 2 OUTs successifs pour mettre à jour ce registre. Effrayant! 😨
🙄
Bullshit : L'auteur essaie de minimiser mon travail de recherche dans le Compendium (décidément cet article est une mine de fiel).
💬
"Une solution, découverte il y a bien des années par Madram, et récemment reprise dans le Compendium de Longshot, implique plusieurs OUT par écran (sur la ligne), ce qui est totalement incompatible avec la programmation d'une démo aux timings serrés, sauf à concevoir un effet très basique." (Hicks / 64NOPs 2, page 37)

L'auteur affirme que Madram a découvert une solution en 1927 que je me suis contenté de "reprendre récemment" dans le Compendium. Je ne me permettrais jamais de remettre en question les travaux de Madram. Si ce dernier a montré une solution à quelques privilégiés, c'est que c'est très certainement vrai. Je n'ai aucun problème avec ça. Cependant, Madram ne me l'a jamais dit, montré, et ne l'a expliqué nulle part publiquement, tout comme il ne l'a jamais utilisé dans une production dont j'ai connaissance. Hicks s'est bien gardé de préciser ce détail afin de laisser croire à ses lecteurs qu'une solution était connue de tous.

Je n'ai donc pas "repris" une solution comme il l'affirme. J'ai découvert une solution. C'est peut-être la même que celle de Madram mais il est impossible de le savoir sans disposer du code qu'il aurait (conditionnel) partagé avec Hicks. Bref, le seul code actuellement disponible publiquement et qui exploite cette solution est contenu dans un des modules de test de SHAKER. L'image ci-dessous montre la disparition de 5 "artefacts" de border (le border est la couleur jaune entre les bandes de couleur) sur une même ligne :

Le compendium explique de manière détaillée la logique de cette technique démontrée dans SHAKER :

Compendium : Désintégration du Border sur CRTC 0
🙄
Bullshit : L'auteur raconte que sans timings serrés, on ne peut obtenir que des effets basiques, afin de discréditer cette technique.

L'auteur est bien entendu libre de ne pas utiliser les techniques décrites dans le Compendium si il croit que ça ne concerne que des "effets très basiques". Il fait cependant un amalgame douteux entre "timing serrés" et "qualité de l'effet". Et par ricoché, il insinue que l'usage de cette technique réduirait la "qualité" des effets. On peut se demander pour quelle raison l'auteur essaie de nouveau dans son article de dévaloriser une nouvelle technique présentée dans mon document. La notion de "timing serrés" est également très subjective. Il suffit d'étudier le code de quelques démos qui croient exploiter au mieux chaque NOP d'une ligne pour se rendre compte que c'est à géométrie variable, étant donné qu'il est possible de faire une même chose de plusieurs façons différentes.

En réalité, cette technique est utilisable dans une multitude de contextes sans préjuger de l'effet obtenu. Dès lors qu'une "ligne" se termine dans l'espace visible, elle peut servir à gérer une compatibilité avec le CRTC 0 si cela s'avère possible. Les "timings serrés" d'une ligne n'ont pas de rapport avec la sophistication d'un "effet".

💬
"L'idée est théoriquement intéressante, mais pratiquement inexploitable : s'il y a jonction, il y a rupture verticale, donc manipulation de nombreux registres en 64 NOPs (en général R12 et/ou R13, et R2 ou R3, voire R0)." (Hicks / 64NOPs 2, page 37)

On a vraiment du mal à croire que ces propos sont tenus par une personne qui se revendique "demomaker". L'auteur a-t-il ainsi chouiné lorsqu'il a appris qu'il fallait "manipuler de nombreux registres" quand Shap lui a enseigné comment programmer des ruptures complexes ? Pas si inexploitable que ça!

Il est bien évident que dans certaines circonstances, perdre des NOPs pour gérer la compatibilité entre différents CRTCs est impossible ou très difficile.

A ce titre, l'auteur va ensuite disserter sur quelques démos qui ne fonctionnent que sur CRTC 1 pour justifier de leur incompatibilité avec les autres CRTCs.

Il ne sert pourtant à rien de pousser des cris d'orfraie ("Pourquoi sont-ils aussi mauvais ?") pour enfoncer une porte ouverte. Chacun est libre de tenter (ou pas) d'adapter son code pour le rendre compatible, voire dégrader un effet (ou l'améliorer sur un CPC+). Personne ne sera hué pour ça, et encore moins pour avoir essayé. Peut-être que Hicks pense qu'une démo devrait fonctionner sur tous les CRTCs de la même manière...Heureusement, tout le monde n'a pas la même opinion.

🙄
Bullshit : L'auteur prétend pouvoir réaliser l'effet visuel de sa démo OSC#3 avec la technique de RVI.
💬
"Plus récemment, la partie finale de OnescreenColonies #3 s'ouvre sur un "CRTC 1 Only" qui a pu émouvoir les plus sensibles. (....). Pour obtenir l'équivalent sur CRTC 0, il faut une RVI, qui consomme beaucoup plus de temps machine, ce qui impliquerait de retirer le sample" (Hicks / 64NOPs 2, page 37)

Hicks évoque ici une autre démo incompatible dont il est le programmeur. Personne ne lui en aurait voulu si il avait remplacé la musique "samplée" par une autre musique rythmée sur les autres CRTCs pour que cette démo soit visible sur tous les CPCs, puisqu'il affirme être en mesure d'en adapter l'effet sur CRTC 0. Il faut néanmoins respecter la vision absolue de l'artiste qui ne souhaite pas dénaturer l'essence même de son oeuvre intemporelle 🤪.

Là ou le bât blesse, c'est que ce qu'il prétend faire est impossible sans utiliser la technique RVLL décrite dans le Compendium, et utilisée par la démo DSC#4 sur CRTC 0 et 2.

⚠️
La technique RVI ne permet pas sur CRTC 0 d'atteindre tous les C9 et est également impossible sur le CRTC 2. Cette technique implique que le C9 d'une ligne N est lié à celui de la ligne N+1, et que C9 repasse à 0 dans la partie invisible ou visible sur CRTC 0 (sur CRTC 1 ce passage à 0 n'est pas impératif lorsque C4=0). Il est impossible ainsi d'atteindre tous les C9 sur CRTC 0 qui n'admet pas des "frame" de plus de 6 lignes dans le bord à cause d'un rebond R5 lorsque R0=1. Ces problèmes n'existent pas avec la technique RVLL, qui implique de connaitre la logique de l'état "Last Line" pour modifier R9 sans conséquence sur chaque dernière ligne visible. Il est donc impossible avec une technique RVI d'accéder à l'intégralité de la ram vidéo du CPC nécessaire à réaliser cet effet.
💬
"Pour Back to Futurs c'est pire : elle tire profit du fait que l'offset est pris en compte quand C0=C4=0, quel que soit C9, ce qui la rend inadaptable sur un autre CRTC que le 1, puisque c'est le seul à présenter cette caractéristique. Dans ce cas, c'était la démo CRTC 1 only, ou pas de démo du tout" (Hicks / 64NOPs 2, page 37)

Offset, l'auteur de la démo en question, et auteur de l'émulateur ACE, a cependant l'air de penser le contraire... Lui non plus ne semblait pas connaitre l'existence de la méthode de Madram pour faire disparaitre l'artefact de border, car il n'y fait pas référence (la technique n'était pas si connue que ça finalement). D'ailleurs, en novembre 2022, sur CpcWiki, il a admis s'être servi du Compendium et de Shaker pour faire évoluer son émulateur ACE (version 1.25, septembre 2022). Cette intégration de sous-fonctions du registre CRTC R8, bien que très incomplète, a été réalisée dans l'objectif d'adapter sa démo, comme il l'explique lui-même ici:

🥵
"Just to give the full picture, some years ago, we created "Back to Futurs'", a demo which was using RVMB (a technic which is known to only work on CRTC 1). So, this R8 trick sounded as an interesting feature since it might have made it possible to adapt (at least partially) this demo for CRTC 0... and my test code was actually an abstract of this demo... and I expected ACE to make it run." (Offset / CpcWiki Forum)
ACE CPC Emulator, only Amiga makes it possible? - Page 5
ACE CPC Emulator, only Amiga makes it possible? - Page 5

On peut saluer ici la volonté de Offset d'envisager l'adaptation totale ou partielle de sa démo au CRTC 0. Encore une fois, personne ne lui jettera un jambonneau cuit si il n'y arrive pas. Par contre, il serait respectable qu'à l'avenir, il ait la gentillesse de citer ses sources lorsqu'il exploite le travail d'autrui.

💬
"C'est le cas de (out)dated (Semilanceata) lancée sur un CRTC 0, que certains ont tout de même clouée au pilori pour cette raison, malgré les efforts de Grim pour l'adapter au mieux" (Hicks / 64NOPs 2, page 37)

Hicks feint d'ignorer que cette démo (à droite) à été critiquée non pas pour son incompatibilité, mais car elle plagiait de manière peu sympathique la démo S&KOH (à gauche), réalisée par Overflow en 1991.

En effet, on peut lire dans les textes contenus dans cette démo (OUT)DATED que Overflow se contente de faire des démos "faciles" ("easy-made demo" dans le texte). Il faudrait sans doute demander à son auteur Grim (alias MrEarWig) si il le pense toujours et si il s'est finalement détaché du pilori.

Il se disait effrayé ("scared") de la voir prise comme modèle technique encore en 2008 par des "moutons". Au détour de textes condescendants, il indiquera que dans S&KOH, ce ne sont finalement que des additions et des boucles de 64 µsec faciles à faire (sic). La démo de Grim sera diffusée comme une "hidden part" (partie cachée) à l'insu même des auteurs de la démo principale (qui en rient encore...).

Pour les profanes, une partie cachée implique que le spectateur trouve une séquence "secrète" de touches afin de pouvoir accéder à une démo de second rang. Il s'agissait par ce biais d'accentuer le côté "obsolète" supposé des techniques découvertes par Overflow.

De nos jours on peut encore trouver ce type de séquence secrète dans un émulateur pour faire apparaitre des textes "sympathiques", comme on peut le découvrir ici.

L'auteur de l'article, qui professait ce type de discours à l'époque, va déclarer récemment, dans une histoire toute personnelle de la demoscène CPC, que la démo OUT(DATED) est un hommage à S&KOH. On ne doit pas avoir la même conception de ce mot et un des relecteurs a du louper quelques pages.

💬
"Un hommage à S&KOH a été réalisé par Grim en 2007, sous le nom de (Out)dated, ce qui témoigne de la fascination qu'exerçait encore cette démo sur la scène de cette époque, puisque nombre de codeurs considéraient que personne ne serait capable de faire mieux un jour." (Hicks / Memory Full page 93)

Ce relecteur n'a d'ailleurs pas signalé 2 fois l'erreur sur la date de parution de sa propre démo. En effet, dans son roman, le justicier du datage au carbone 14 des démos CPC indique qu'elle est réalisée en 2006, puis une autre fois en 2007, alors que les textes et les commentaires du source public de la démo indiquent qu'elle est de 2008. Une amnésie collective peut-être ?

💬
"Beaucoup de codeurs se casseront donc les dents sur la rupture verticale, qui s'avérera être la technique la plus mal maîtrisée dans des productions diffusées : l'écran d'intro de S&KOH avec ses overflow divers; (...). Il faudra au fond attendre la sortie de la demo (Out)dated de Grim, en 2006, pour observer la première rupture verticale, ici dans une version multi-bloc, exécutée proprement !" (Hicks / Memory Full page 158)

J'en profite pour rectifier une autre erreur malencontreuse dans la citation ci-dessus. L'introduction de la démo S&KOH occupe plus de 312 lignes, mais sa rupture verticale est parfaitement exécutée sur les CRTC 0 et 1 : Autrement dit, il y a une seule HSYNC par ligne de 64 µsec, toujours située à la même place. Elle elle juste plus courte sur CRTC 1 que sur CRTC 0, et donc l'image est décalée à droite sur CRTC 1, comme on peut le voir ci-dessous :

Hicks semble avoir oublié qu'il évoque dans son livre les "previews diffusées par Overflow mi-1994" (page 166 de MF) et dont "la seconde preview était l'écran « High Technology», un déluge de ruptures diverses, dont des ruptures verticales" (page 105 de MF). Ces previews, présentées en 1992 lors de l'Euromeeting 2, étaient pourtant "exécutées proprement" :

Selon Hicks, il faudra attendre 2006 pour qu'enfin, en avant-première mondiale, les spectateurs (médusés !) admirent la première rupture verticale parfaite montrée dans la démo cachée OUT(DATED).

Il faudra néanmoins attendre 2018 pour que ce dernier démontre qu'il est encore possible de bidouiller empiriquement avec les tailles de HSYNC dans sa démo DenScreen, évoquée dans un précédent billet. Du coup, est-il vraiment bien placé pour juger si un code ou un effet est propre ou sale ? Il devrait peut-être réellement lire le Compendium plutôt que de passer son temps à le déprécier.

Pour revenir sur le sujet de la compatibilité, on observe que Grim s'est livré à un exercice extraordinaire. Il a critiqué d'une part la technique de RVI mise au point par Overflow à cause de ses problèmes de compatibilité, et ce afin de promotionner la technique de RVMB qu'il emploie (au titre de calculs réalisables dynamiquement durant la ligne).

Il explique ensuite après qu'il n'a pas (encore) réussi à enlever les octets de border sur CRTC 0 (mais semble alors déterminé à le faire) et qu'il n'a pas eu le temps de l'adapter sur CRTC 2 (...).

Si on résume la petite affaire, on a une démo "hommage-plagiat" faite rapidement, et tellement simple qu'elle est modestement intégrée en douce comme partie cachée dans une méga démo. Elle exploite une technique RVMB qui était connue depuis au moins 1992 (voir encart ci-dessous) et l'auteur critique la technique RVI de la version originale à cause de ses problèmes de compatibilité.

Archive: Rupture Verticale (31 Août 1992)
Pour inaugurer la section ‘archives’, voici un courrier daté du 31 Août 1992, que j’ai reçu de la part de Longshot. Il y décrit l’état déjà bien avancé de la compréhension de la rupture verticale, technique révélée pas la célèbre S&KOH , sortie en Novemlre. J’ai retranscrit

Sauf qu'à y regarder de près, la démo S&KOH fonctionne sans artefact visuel sur 4 des 5 CRTCs et pourrait même aujourd'hui fonctionner sur l'intégralité des CPCs sans problème, moyennant une adaptation au CRTC 2.

La démo S&KOH bouge également un sprite animé sur le dessin central. Le plagiat de (OUT)DATED n'a malheureusement pas été poussé jusque là. Cette démo aurait peut-être du plutôt s'appeler (SUB)PRODUCT ?

Pour réaliser peu ou prou les mêmes effets, on a ici l'exemple de 2 techniques différentes utilisées. L'une présente des problèmes de compatibilité que Overflow a réussi à régler en grande partie en 1991. L'autre est plus simple a mettre en oeuvre, surtout en 2008, mais reste à priori incompatible avec les autres CRTCs.

Enfin, la technique RVMB complique un peu les choses si il fallait pousser l'exercice jusqu'au bout et bouger le sprite animé que j'ai mentionné dans le paragraphe précédent, car la mémoire d'une ligne n'est plus linéaire et l'adresse change tous les 16 octets. Rien d'insurmontable cependant pour quiconque est capable d'avoir un tel recul sur ces techniques dépassées ("outdated") 😅.

Ce ne sont que des additions, voyons! On me souffle aussi que ce ne sont que des octets ! Bigre !

Heureusement que Overflow avait un CRTC 0... On a eu chaud, Marcel !

Longshot / Logon System