Émission Underscore #209 du 27 décembre 2020

Actu

Les FAILs du mois

Chiptune: Little Big Adventure Remix: ‘Twinsen of Twinsun’

Sujet : Les idées reçues sur l’Amstrad CPC

Comme beaucoup d’entre vous, je suis sur un gros réseau social où il y a beaucoup de groupes dédiés à l’Amstrad et où tous les passionnés ou nostalgiques se retrouvent, avec une expertise de la machine plus ou moins prononcée.
Alors, évidemment, en tant que programmeur, il y a pas mal de choses qui me font bondir mais je ne réagis pas à chaque fois. D’un, la susceptibilité des gens est à fleur de peau en ce moment et puis je trouvais plus sympa de faire cette chronique pour parler des plus belles idées reçues concernant le CPC

note sur cette légende urbaine, les spécialistes ne sont pas tous d’accord /!\

Le Plus n’est pas un vrai CPC

=>
Bon ben déjà, si il ne s’appelle pas CPC ce n’est pas la volonté d’Amstrad, qui a fabriqué les CPC et les Plus mais simplement une question de droits juridiques. Rien à voir avec l’élargissement du trou de balle des diptères

le CRTC-2 est le seul à faire de l’entrelacé et il possède une technique rapide de répétition de ligne (reg1>reg0)
le CRTC-1 (avec l’Asic) n’affiche pas de border sur les ruptures verticales visibles
le CRTC-0 ne fait pas le split-border de la même façon que le CRTC-1
Enfin, il y a des CPC qui ont eu le CRTC des Plus (le fameux costdown), donc bien des CPC avec un CRTC-3 castré. De là, que le Plus possède des sprites hard, des DMA et des couleurs étendues ne devrait choquer personne, c’est une sorte de CPC ECS (enhanced chipset)

– Ne sait pas faire de scroll hard

C’est quelque chose qu’on entend depuis des années, alors que dès qu’on allume la machine et qu’on se retrouve avec l’interpréteur BASIC, on peut faire un scrolling hard très simplement en restant appuyé sur le curseur haut ou bas. Car oui, le BASIC fait scroller l’écran avec un scrolling hard.
Bien entendu, cela reste un ordinateur, il n’y a donc pas de tile-map comme sur console mais un CPC peut commencer son écran graphique à peu près n’importe où en mémoire. Parmi les jeux CPC les plus connus, on se rappellera de Krafton & Kunx, Bob Winner, Titan ou encore (je le kiffe celui là) Burning Wheels

– C’est facile de faire un jeu de plateforme sur un Plus (sous-entendu y a des tile-map)

Lorsque l’Amstrad Plus est sorti, on a dit qu’il avait des fonctionnalités pour le scrolling hard ce qui a entrainé de grosses incompréhensions. En effet les fonctionnalités de scrolling du Plus sont à peine plus évoluées que celle du CPC.
Pour le scrolling horizontal, un décalage fin très pratique permet de bouger l’écran de quelques pixels facilement, on n’est plus obligé comme sur CPC de triturer la HBL ou d’ajouter à la main des bords noirs sur l’écran. Concernant le scrolling vertical l’apport est plus discutable. Pour des raisons de compatibilité il reste un héritage fort de la gestion écran par bloc de 8 lignes. Le seul avantage réel est qu’on décaler l’écran en restant stable, par exemple sous le BASIC. Il n’y a aucune tile-map comme sur console dans lequel on se déplace, toutes les données graphiques qui changent suite au scrolling doivent être mises à jour en logiciel. Et pour la petite histoire, si je prends le Sonic de NoRecess en cours de réalisation, comme le scrolling est en plein écran, il faut non pas un, mais deux scrollings différents collés l’un à l’autre, pour donner l’illusion d’un scrolling géant. Ce n’est donc pas facile de faire un plateformer sur Plus, même si il y a quelques aides.

Avec photoshop c’est facile

Là on est sur l’idée qu’avec un super outil (pas du tout adapté au pixel art mais bon) on peut faire de meilleurs dessins. C’est méconnaitre les problématiques du pixel art, je pense qu’un graphiste en parlerait mieux que moi, mais pour le graphisme, la plupart des outils modernes sont au contraire un problème, en particulier parce qu’on n’a pas le rendu d’un écran cathodique en temps réel. Mais aussi parce qu’ils ne sont pas conçus pour autre chose que la retouche photo et non la création.

Donc ben, pas d’bol, c’est toujours aussi difficile de faire des beaux graphs sur CPC et pour rappel, les outils de conversion automatiques, aussi bons qu’ils soient, donnent presque toujours des résultats qui sont améliorables à la main. Je dis presque mais ma conviction profonde est un toujours absolu.

Le tramage augmente le poids des images

Alors j’aurai envie de commencer par demander la charge de la preuve. En effet, quand on affirme quelque chose, il faut le prouver!
Bon, en pratique, le tramage n’augmente pas le poids de l’image. L’anti-aliasing peut un peu augmenter son poids SI et seulement SI on compresse l’image mais la pertinence de l’affirmation est à rapprocher de “si je fais un dessin avec des gros pâtés ça prendra moins de place que faire un joli dessin avec précision” => poubelle
En pratique toujours, les graphismes sont stockés en brut dans la mémoire car on n’a pas le temps de décompresser avant affichage, à quelques exceptions rarissimes et souvent lentes.

Il faut réserver une couleur pour la transparence des sprites

Cette affirmation se base sur un fond de vérité. Il existe plusieurs façons d’afficher des sprites logiciels, puisque contrairement aux sprites hardware, les sprites logiciels sont programmés et on les programme comme on veut. UNE des techniques parmi tant d’autres consiste à dire qu’on réserve une couleur (souvent l’index zéro) et que si on tombe sur cette couleur, on n’affiche pas le pixel.
Mais il existe des jeux qui stockent les données graphiques ainsi que le masque d’affichage, c’est deux fois plus gourmand en mémoire mais ça permet d’accélérer un peu les choses. Une autre méthode consiste à afficher les sprites avec du code pur. Ce n’est plus une routine qui lit des données graphiques pour les afficher, mais une routine qui affiche directement. Bien entendu il faudra une routine par sprite et selon les contraintes de réalisation, la routine peut être très volumineuse.

Un petit mot sur l’Amstrad Plus avec ses sprites hard et ses 15 couleurs. La valeur du pixel peut prendre 16 valeurs, de zéro à 15 et c’est le zéro qui est considéré par le chip graphique comme la transparence. Il n’y a pas à proprement parlé de couleur réservée puisque cette couleur n’existe pas, la palette est réduite par contre mais on s’attaque à l’arrière-train des mouches là…

ils ont des palettes séparées (confusion CPC/Plus)

Sur CPC avec les sprites logiciels, la palette est la même et les données à l’écran sont… …communes. En fait il n’y a pas de notion de sprite hardware donc aucune raison de différencier les couleurs des sprites du décor. On affiche des pixels, que ce soit du décor ou ceux d’un sprite. Mais…

…comme à chaque légende il faut trouver le fond de vérité! Et je pense qu’on peut trouver une explication dans certains jeux comme ghost’n’goblins qui utilisent des astuces booléennes avec les couleurs. En s’affichant, le sprite se masque tout seul avec le décor et se paie même le luxe d’effacer les reliquats de l’étape précédente, occasionnant parfois des glitchs graphiques amusants.
pour cela il faut réduire le nombre de couleurs visibles à 7 dans un mode à 16 couleurs. L’arrière-plan utilise les 4 premières couleurs tandis que les sprites ajoutent 3 couleurs avec les 12 restantes.

L’explication technique étant que les 3 couleurs occupent les bits du haut, en dupliquant les couleurs pour tous les cas possibles des bits du bas. On mettra un petit schéma sur le blog et quelques calculs pour expliquer.

Les sprites et le fond ne peuvent pas avoir les mêmes couleurs

Je pense qu’on est là encore sur la même base factuelle, le jeu ghost’n’goblins mais il n’y a pas à chercher bien loin pour trouver des jeux qui mettent en défaut cette affirmation erronée. Un petit mot sur l’Amstrad Plus à nouveau où les sprites hard ont une palette dédiée de 15 couleurs mais si ces couleurs peuvent être différentes de celle du fond, elles peuvent tout aussi bien être identiques!

Toujours les sprites, on doit se cantonner à des résolutions rectangulaires, multiples de 2

Il est assez flagrant de voir qu’en 2020, la plupart des jeux produits ou en cours de production ont des graphismes terriblement rectangulaires. La tête et le corps des personnages forment un rectangle parfait donc on semble ne jamais pouvoir sortir. Vous voyez ce que je veux dire? Les petits bras qui ne débordent jamais, les jambes qui
font des petits pas, etc.
Je pense que l’origine est à chercher du côté des programmeurs qui pour des raisons de facilité évidente n’auraient à gérer qu’une seule dimension de sprite, au lieu de prendre en compte la largeur à chaque étape de l’animation, provocant quelques décalages à calculer.
Cet obstacle n’est jamais compensé par un rectangle plus gros. Après tout, on pourrait faire plaisir aux graphistes et leur octroyer plus de mémoire pour qu’ils puissent s’exprimer… ..sauf que la mémoire, sur CPC, est précieuse.
Nous avons donc une contrainte qui est devenue au fil du temps une idée reçue qu’il n’y a plus que cette façon de programmer les sprites.
Techniquement il existe bien entendu des toooonnnnnes de méthodes pour s’en affranchir. L’idée étant soit de
découper le dessin en plusieurs petits sprites de même taille, soit sur la hauteur en plusieurs sprites de largeurs différentes, soit carrément de passer au code généré, une routine dédiée qui dessine le sprite en respectant les contours au pixel près. C’est cette dernière méthode qui est la plus rapide mais aussi la plus gourmande en mémoire (quoique…)

A l’époque on n’avait pas d’ordinateur puissant pour faire les jeux. Oui et? Il fait quoi l’ordi tout seul?

Affirmation biaisée => il y avait beaucoup de jeux directement créés sur la machine mais il y avait aussi dans les studios de jeux vidéos qui avaient les moyens, des ordinateurs puissants (Atari, Amiga mais surtout PC) qui disposaient déjà d’environnements de développement et de librairies pré-mâchées.

Pour rappel, les Intel 386DX sortent en 1986. Oui ils sont chers mais ils sont à la portée des studios de jeux vidéos.
Me concernant il n’y a aucun outil que j’utilise qui ne pourrait pas fonctionner sur cette machine, même si je dois m’attendre à un peu plus de lenteur évidemment.

Ce qui change vraiment, ce sont les émulateurs ET les cartes hardware de développement. On pense bien évidemment à l’émulateur Winape dont le débogueur très pratique et la fidélité relative d’émulation a changé complètement la façon de programmer. Les cartes hardwares sont tout aussi géniales car on peut compiler et envoyer dans la vraie machine le programme pour le tester. Et heureusement qu’il y a eu quelques avancées de ce côté car nous ne sommes ni payés pour faire ce que nous faisons, ni à plein temps pour le faire!

Pour moi, les gros progrès ne sont pas particulièrement dû à la puissance des machines.

Les progrès se situent surtout sur le confort de développement:

  • meilleurs écrans, plus grands, multiples
  • temps de compilation réduits
  • environnements puissants, onglets, quasiment plus de limite de taille => émulateurs+debug
  • outils plus souples, à jour et derniers raffinements propres à l’ordinateur qui exécute l’outil

on gagne du temps mais le résultat produit n’est pas meilleur pour autant!

La seule exception se situerai dans les outils de compression.

Pour rappel, il y a énormément de jeux des années 80 qui faisaient de la décompression temps réel.
En gros, tous les portages spectrum, mais pas que. Et beaucoup d’autres programmes utilisaient de la compression plus classique.

Tout ça pour dire que dans une petite mesure les programmes de compression ont longtemps stagné avant de connaitre quelques améliorations avec la “recherche optimale”. Recherche optimale, qu’est-ce donc? La technique n’est pas nouvelle, on en voit quelques prémices sur PC avec des programmes qui recompressent les ZIP pour gagner quelques pourcents.

La plupart des compresseurs utilisent des “clefs”. Ces clefs correspondent à des données déjà compressées et qu’il faut copier à nouveau. Une clef est définie par une position et une longueur.
Si cette clef met deux octets à être stockée, dès que cette clef peut définir un morceau à recopier de 3 octets, on va gagner 1 octet. OK, personne n’est perdu?
Les compresseurs simples cherchent simplement la clef la plus longue pour l’inclure au flux compressé mais dans certains cas pas si particuliers que ça, il peut être intéressant d’utiliser une clef plus courte afin d’avoir à nouveau une clef derrière. Cela implique de tester plusieurs agencements de clefs et donc prend du temps ainsi que de la mémoire.
Au final, on compresse plus fort, on décompresse plus vite mais si la différence est significative, on reste dans des gains modestes, rien d’extraordinaire.

Dans la même veine => Aujourd’hui les outils sont tellement mieux? Oui et? Qui les fait ces outils? ^_^

Quand on écoute les sachants, on a l’impression que les outils tombent du ciel, ou que la machine a changé mais non, le CPC est toujours à 4MHz et il faut écrire les outils
Bon ok, parfois des gens les écrivent pour vous.

En guise de conclusion, au delà des incompréhensions techniques, j’ai l’impression que certaines idées reçues tiennent à une certaine opposition entre les programmeurs des années 80 et ceux d’aujourd’hui. A mon sens la comparaison n’a pas lieu d’être. Ils avaient des délais très courts de réalisation mais étaient professionnels. Aujourd’hui les développeurs sont amateurs pour beaucoup, mais ils ont plus de temps, plus d’information, des kits de développement. Ce n’est pas oppossable, c’est juste différent 🙂

Chiptune: Ultrasyd – Who Cares

Agenda

Toujours rien, c’est vraiment les vacances !

Du lien et des liens

Sur la suggestion de Benjamin Sonntag : Si vous avez envie de vous émerveiller et d’avoir un fun maximal (en anglais, désolé 🙂 ) regardez “Fun to Imagine” avec Richard Feynman !!

« Les passages secrets du web » qui recense des sites un peu moins connus pour parcourir le web à l’ancienne mode, avec des annuaires, des moteurs de recherche alternatifs, les webrings…

Une histoire d’ingénierie inverse de l’Intel 8271, un contrôleur de lecteur de disquette utilisé dans le BBC Micro, et qui en fait était un microcontrôleur dual-core.

Mise en ligne officielle d’HiSCoD : une base de données recensant près de 10 000 conflits sociaux de la fin du Moyen Âge au début du 19e siècle.

Sur le Framablog, une maison d’édition explique son processus de dégooglisation.

« Vis ma vie de député », un jeu vidéo au parlement… mais avec des chats.

Astrologeek

  • SF : tout ce qui m’a raconté , c’est de la science fiction pour moi , je n’y crois pas !
  • libriste : Avant je distribuais librement en Chine et je suis devenu prévenu
  • devops : C’est l’heure de Docker et Difftool !
  • musicien : je sais jouer dans le noir , mais je le note pas.
  • électronicien : Alors, j’ai quatre contacts… – T’es CAS CONTACT ?? – Non, j’ai quatre contacts sur le connecteur !
  • procrastinateur : Mince, pour une fois que j’allais faire un truc, c’est les vacances !