Vomitiks #04 : Rupture Ligne à Ligne en détresse !

Vomitiks #04 : Rupture Ligne à Ligne en détresse !
Démo SFMX (2022)

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 insinue que la technique de rupture ligne à ligne sur CRTC 2 que j'ai documentée dans le Compendium serait difficile à mettre en œuvre.
💬
"La rupture ligne à ligne : Facile sur CRTC 2 ? Une autre légende urbaine circule depuis peu : la rupture ligne à ligne serait, suite à la diffusion du Compendium, facile à réaliser sur CRTC 2, Amazing Rev 2021 faisant foi. Cette dernière contient en effet la première rupture ligne à ligne de l'histoire dans l'une des partie de Longshot, qui dans cette version 2021 passe sur CRTC 2." (Hicks / 64NOPs 2, page 38)

La technique dite de "rupture ligne à ligne" est une technique sur CPC qui permet de modifier l'adresse de ce qui est affiché sur chaque ligne : c'est une vectorisation de la ram vidéo qui permet de créer de très nombreux effets de démos, comme les plasmas, wobbler, et autres effets aux noms barbares. Le principal inconvénient de cette technique est que seulement 12.5% de la ram vidéo du CPC est utilisable, ce qui représente 85 lignes "différentes" (cette mémoire est parfois appelée "bloc zéro"). Cette technique était considérée comme impossible sur le CRTC 2 jusqu'en 2021. D'autres techniques de rupture plus complexe à mettre en œuvre ont permis d'améliorer ces performances mais également au détriment de la compatibilité. Il n'existe pas de technique miracle, chaque méthode présentant ses contraintes et ses avantages. On peut citer notamment les techniques de RVI, RVLL et RVMB qui permettent d'accéder à une portion plus grande de la ram vidéo. Les deux dernières étant des déclinaisons de la première et permettent l'accès à 100% de la mémoire vidéo.

Sur le CRTC 2, la technique de "rupture ligne à ligne" a longtemps été considérée comme impossible à réaliser car ce bougre de circuit refusait de "rester" sur le fameux "bloc zéro" que je viens d'évoquer. Mon travail de recherche sur le CRTC 2 a permis d'en comprendre la raison et une solution a été présentée fin 2021 dans le Compendium.

L'auteur de l'article nous apprend qu'une "légende urbaine" circule depuis lors sur la facilité d'emploi de cette solution, sans qu'on sache très bien d'où proviennent ces rumeurs. Il sous-entend ici que la technique présentée dans le Compendium est difficile à mettre en œuvre et que des personnes ont cherché à faire croire que c'était facile. On se demande bien qui et dans quel objectif ?

Cette remarque sur la difficulté est étonnante car on a l'impression qu'elle est à géométrie variable pour l'auteur. Parfois il trouve que réaliser une technique de RVI sur CRTC 0 est simple, et sur un sujet aussi commun sur CPC que la rupture ligne à ligne, il trouve la chose difficile dès que ça concerne le CRTC 2 (ce circuit qu'il qualifie de "bas de gamme" dans ses démos).

Bref, si à titre personnel, je n'ai jamais prétendu que la technique de "rupture ligne à ligne" sur CRTC 2 était simple à réaliser, elle n'est en réalité pas excessivement complexe.

🙄
Bullshit : L'auteur tente de décrédibiliser la portée de mon travail sur le CRTC 2 en racontant une ânerie technique.
💬
"1) On sait depuis longtemps comment adapter une rupture ligne à ligne sur CRTC 2. Il suffit d'éviter C4=C9=0, généralement en déclenchant une petite RVI, via par exemple R9=1. Longshot a montré dans le Compendium qu'on pouvait aussi le faire en modifiant R9 pendant le Hsync. 2) Dans ces deux cas ce n'est pas si facile car cela implique de sélectionner R0 soit R9 et de leur assigner deux valeurs, soit au minimum 3 OUT, et concrètement environ 16 NOPs par ligne. Si personne ne l'a fait, c'est que c'était peu intéressant et non difficile." (Hicks / 64NOPs 2, page 38)

Pour décrédibiliser mon travail, il affirme « qu’on sait depuis longtemps comment adapter une rupture ligne à ligne sur CRTC 2 ». Son propos "technique" démontre qu'il n'a pas compris le principe énoncé dans le Compendium et qu'il a du se contenter d'aller voir l'exemple donné. Il ne peut pas mesurer objectivement la complexité d'application d'une technique qu'il n'a pas comprise.

⚠️
Extrait du Compendium : "Si un objectif est de maintenir la remise à 0 de C4 et de C9 sur chaque ligne, il est possible de forcer l’état de dernière ligne sur une première ligne, en créant la condition en fin de HSYNC qui permet sa prise en compte. Autrement dit il suffit d’autoriser la gestion de la « dernière ligne » sur le dernier caractère de la HSYNC pour permettre à ce CRTC de gérer la remise à 0 de C4 et de C9. Modifier R9 judicieusement avant et après la HSYNC permet d’atteindre cet objectif."

L'auteur minimise la portée de mon travail, qui n’aurait donc consisté qu’à présenter une méthode complémentaire à une autre technique de rupture déjà connue et de complexité équivalente dans sa mise en œuvre.

Sauf que... « On sait depuis longtemps », mais personne ne l’a jamais fait.

Et pour cause...

Faire une RVI classique sur CRTC 2 est une « légende urbaine »!

Et l'auteur de conclure que "si personne ne l’a fait", c'est parce que « c’est peu intéressant et non difficile ».

Facile ou difficile, on ne sait plus !

Difficile en mode "légende urbaine", et facile en mode "c'est peu intéressant".

Belle et rigoureuse démonstration ! Circulez, y’a plus rien à voir.

⚠️
Une RVI classique ne permet pas de récupérer C9=0 sur la ligne visible sur un CRTC 2, ce qui est l'objectif d'une rupture ligne à ligne conventionnelle. Le Compendium explique ça clairement dans les chapitres 13.3.1 et 13.4.1. L’offset ne peut changer que si C0 rencontre R1 sur la dernière ligne du frame. La chose est peut-être « en commentaire » dans l’émulateur ACE, puisque ce n'est toujours pas géré correctement à ce jour. 
⚠️
En utilisant une technique dite de RVLL (introduite par le Compendium), il est toutefois possible d’obtenir un C9=R9 sur chaque ligne ou un C9=0 grâce à R9=8. En complément, il est utile de préciser que la terminologie d’une RVI suppose qu’il y a plus d’une ligne dans le bord, et c’est pour ça que ça ne s’appelle pas une RLAL (rupture ligne à ligne), une RVMB (rupture verticale multi-blocs), ou une RDS (Rupture de Schrödinger : facile et difficile tant qu'on ne l'a pas expérimentée soi-même).
🙄
Bullshit : L'auteur rabaisse ensuite gratuitement mon travail dans Amazing Demo pour justifier de ses précédentes fake news sur le CRTC 2.
💬
"Seul un effet aussi simple que le scrolling de Amazing Rev 2021 peut être adapté." (Hicks / 64NOPs 2, page 38)

Après avoir jugé que mon travail a peu d'intérêt, au point que personne n'a tenté d'utiliser une méthode de substitution "bidon" pour utiliser cette nouvelle technique de rupture ligne à ligne sur le CRTC 2, il conclue en portant un avis péjoratif sur le code qui est derrière l'effet d'une démo que j'ai réécrite.

Il sous entend ici qu'il y a beaucoup de "temps libre" sur chaque ligne de l'effet réalisé, ce qui permet de l'adapter au CRTC 2 "facilement". Et hop!

L'auteur devrait manifester un peu plus de rigueur avant de raconter des âneries. Je pourrais le renvoyer au code des "effets" de certaines de ses démos, mais le plus simple serait qu'il vérifie sérieusement ce qu'il écrit au lieu de se baser sur des suppositions.

Dans l'effet qualifié de « simple » dans la partie nommée « MEGARASTER » de Amazing Demo à laquelle il fait référence, la couleur est modifiée et il y a un effet de déformation horizontale sur chaque ligne durant le scrolling. Cela représente la mise à jour de 4 registres CRTC et de 1 registre du GA sur chaque ligne, soit 9 instructions OUT, ce qui est somme toute considérable, mais pas impossible. Pour illustrer mon propos, on peut voir ci-dessous le nom du groupe situé en bas de l'écran en mode 2 qui se déforme en bleu :

Amazing Demo : Partie Megaraster

L'effet n'est donc pas "simple" et l'adaptation loin d'être infaisable sur des lignes déjà "chargées" niveau CPU. Contrairement à ce que l'auteur essaie de faire croire, une grande majorité des démos utilisant cette technique pourraient être adaptées simplement.

Par ailleurs, et c'est un peu technique, cher lecteur/trice, mais tenter de faire croire que chaque démo devrait forcément exploiter « astucieusement » l'intégralité du temps "processeur" d’une ligne n'est pas très sérieux de la part d'un expert auto proclamé de la démo CPC. Il existe tellement de manières différentes de faire une même chose en informatique que cette remarque confine à l'absurde. Heureusement d'ailleurs, car il faudrait sinon éliminer une assez grosse partie des productions CPC, même récentes.

Encore aujourd'hui, des démos CPC sont produites et peuvent être adaptées sans problème au CRTC 2. C'est le cas par exemple de la démo de SFMX, réalisée en 2022, et pour laquelle l'auteur n'a pas fait l'adaptation sur CRTC 2 par manque de temps pour respecter la "deadline" de présentation de sa production.

⚠️
Sacrifier 16 NOPs dans des effets de ligne à ligne n'est pas en soi dramatique pour de nombreuses démos. C'est surtout inhérent aux contraintes et aux choix techniques d'architecture. Ces propos sur les NOPs perdus sont donc par nature assez éloignés des faits. Il est parfois plus économique de déporter un traitement pour pouvoir profiter de tous les registres du Z80A sans avoir à basculer sans cesse sur le CRTC et/ou le GATE ARRAY et/ou le PPI+AY, par exemple. Enfin, les démos les plus appréciées ne sont pas forcément celles ou chaque "NOP" d'une ligne est exploité.

Bref, si la technique de "rupture ligne à ligne" présentée dans le Compendium pour le CRTC 2 a été peu utilisée, c'est surtout car il y a peu de productions qui sortent chaque année et que le Compendium a seulement deux ans. Et si personne ne l'avait fait "autrement" avant, c'est qu'il n'y avait pas de technique de substitution connue avant la RVLL, qui a également été présentée dans le Compendium.

Enfin, et ce n'est pas une "légende urbaine", le CRTC 2 est un circuit régulièrement dévalorisé par quelques uns sur les réseaux sociaux quand ce n'est pas dans leurs démos. On se demande ou est le "demospirit" dont ils se réclament, puisque ce qui est intéressant justement en démo, c'est de pouvoir dépasser les limites et contraintes des circuits au lieu de s'enterrer dans des certitudes techniques somme toute assez conservatrices. Bien plus à mon avis que d'écraser son voisin dans une saine et virile concurrence teintée d'ironie malsaine.

Dont acte!

Longshot / Logon System