Divers :
  Softs à utiliser
  Le son
  Photo d'écran
  Identifier CRTC

Cat'arts :
  Introduction
  Ordre d'exécution
  Taire le système
  Bidouilles

Graphisme CPC :
  Introduction
  Le pixel
  Les limites
  Hinting
  Antialiasing (1)
  Antialiasing (2)
  Antialiasing (3)
  Luminosité
  Subpixel
  Gestalttheorie

Couleurs :
  Les couleurs
  Flipping
  Tableau récap.
  Complémentaires
  Fondus


Tout savoir sur la création des CAT'arts

I - Introduction sur les CATalogues décorés
écrit le 14/12/2007, révisé le 26/09/2012

La création de catalogues décorés a depuis quelques années disparu des disquettes. C'est fort dommage, car dans le domaine de la création sous contrainte, il y a dans ce domaine apparemment limité un certain potentiel créatif. Potentiel presque inexploité à ce jour.

Depuis les débuts de l'Amstrad on voit à l'écran une mise en page un peu fantaisiste au moment où on tape la commande "CAT". On a d'abord la surprise de voir qu'un auteur à pris la main sur la présentation du système, et qu'il choisit de nous présenter le contenu de la disquette sous la forme de décorations assez sommaires.

En travaillant sur l'idée de décorer des catalogues, j'ai soumis le projet à Tom & Jerry, avec qui nous avons pas mal découvert de choses au sujet du catalogue. Il a développé un outil "CATACLYSME" permettant à partir de la création d'un fichier en BASIC de générer automatiquement le catalogue d'une disquette. Fort subtil. J'espère que ce logiciel et les productions en cours seront le point de départ d'une saine compétion dans ce domaine qui peut passer pour nouveau, au regard de la maigre curiosité qu'il a suscitée jusqu'à aujourd'hui.

CAT sur un C64 La décoration des catalogues sur C64 est aussi un sport, mais (bien que je connaisse assez peu cette machine), ils ne semblent pas jouir de fonctions d'affichage autres que les simples caractères graphiques. Ceci dit, ils font malgré tout l'effort de nommer leurs fichiers de telle façon que l'affichage représente un dessin ou logo, pour le plaisir des yeux du spectateur.


1 - Revue de CAT des 20 premières années...
On a vu certains effets visuels sur des catalogues célèbres. En voici quelques uns intéressants :

  Protections hexagone (depuis 1989) : très fiable ! Très propre, très intelligent pour l'époque. Moins barbare que beaucoup de leurs successeurs. Naturellement il faut admirer ce tout premier cheatmode !
--> Pour le voir en faute, le seul moyen est d'avoir des couleurs non standard en encre 0, alors on voit apparaître le message caché au lancement. Ce CAT fonctionne depuis n'importe quelle commande et même sur 464.

  The Demo (1991 - The Logon System) : "code" très scolaire, mais c'est une première tentative...
--> Sitôt sorti de CAT en mode 1, il a des couleurs bizarres.

  Voyage 93 (1993 - Prodatron) : Très... coloré ! Code encore un peu primaire, il essaie de tout mettre dans un seul CAT. Le seul à oser le mode 0 pour sa finesse...
--> Ne fonctionne qu'en mode 1 et sur 6128. Découverte fondamentale du &07 ! Une entrée utilise même le &08 pour virer le point système !

  Megablasters (1994 - Odiesoft) : code très original et très bricolo.
--> Ça marche tout le temps sans faute, même sur 464 en mode 0. Par contre, l'écran reste noir pendant 2 grosses secondes. C'est la seule fois que je vois une &1E pour oublier le système !

  Ultimate Face Hugger Megademo (1994 - Face Hugger) : code un peu académique, mais fiable et sans risque...
--> Aucun défaut, marche tout le temps. Juste un regret : Ready réapparaît n'importe où, et le "\" du QUERTY donne un "ç" en AZERTY.

  Unique (1999 - NWC & Tyronesoft) : Original ! Ils mettent à jour le CAT à chaque chargement. Un homage car ils ont évité le fond noir !
--> Recordmen de la place gaspillée avec 1 lettre affichée par entrée de catalogue ! ! ! Et c'est même pas universel... les couleurs déconnent un peu comme The Demo. Plus on avance dans les dates, plus les CAT sont rustiques. Sorte de rétroprogrès...

  Divine (2000 - Garbage Performers) : Simple, il utilise le &08, le &07 et les encres clignotantes (yeah !).
--> Apparemment, il est pas le premier à avoir des défauts de couleurs en autre chose que le mode 1 !

  Demoizart (2004 - Arkos, pour ne pas dire Targhan) : Très beau, il est mon préféré. Mais l'auteur ne comprend toujours pas pourquoi ça marche !
--> Ne fonctionne qu'avec CAT en mode 1 sur 6128. Mais ça vaut le détour.

  Midline Process (2005 - Arkos, pour ne pas dire Targhan) :
--> Catalogue très animé (6 secondes), mais pareil que l'autre : ne fonctionne qu'avec CAT en mode 1 sur 6128. Incontournable.

  Citadelle (2005 - Tom & Jerry) : Fameux propotype de son logiciel ! Le plus graphique de tous les CAT... il contient quelques astuces.
--> C'est le CAT qui a permis de découvrir des différences entre 6128 / 464. Ne marche qu'en CAT mode 1 cependant (et ça se comprend).

Pour en découvrir davantage, allez voir dans le musée ce qui s'est fait en CAT'art au niveau des jeux ou des demos.

Est-il possible de faire mieux ?
Mieux que Prodatron ? Ouiiiii ! Mais pour cela, ne pas avoir peur de bidouiller un peu. Voici une liste de petites astuces à ne répéter à personnes. Des sortes de secrets de famille pour arriver à faire mieux que les autres ;-)


2 - Comment un tel miracle est-il possible ?
Le catalogue est composé des 4 premiers secteurs de la piste 0 de la disquette (format DATA). Il est ailleurs pour les autres formats, mais je ne suis pas spécialiste en la matière. Apparemment, sa taille est invariablement de 4 secteurs standards. Le système lit les données qui y sont contenues et les affiche. Une partie concerne des données purement techniques (type de fichier, taille et position sur le disque, fichier caché ou non, n° du USER, etc.), tandis que l'autre concerne des informations directement affichées : le nom du fichier (avec extension), auquel le système ajoute une mise en page.

L'affichage des caractères sur Amstrad CPC permet certaines subtilités pour qui veut bien s'y attarder. Tout le monde connaît par exemple le PRINT CHR$(7) qui permet de déclencher le bip. Si on remplace un caractère du nom d'un fichier par ce même code "07", alors au lieu d'afficher un caractère, l'affichage du catalogue émettra ce bip. Il existe 32 codes de commande analogues permettant certaines possibilités d'affichage utilisés dans les caractères de commande (0 à 31) décrites dans tout bon manuel de l'Amstrad. Là, commence le jeu créatif de savoir ce qu'on peut faire avec...

À noter toutefois que l'utilisation de ces 32 caractères spéciaux empêche l'utilisation de l'entrée correspondante pour un vrai fichier. La décoration d'un CAT enlèvera la possibilité de mettre des fichiers à chaque entrée consommées pour des effets. Cela dit, rien n'interdit d'utiliser ces vrais fichiers pour le catalogue, que ce soit pour de l'affichage (très risqué) ou simplement pour améliorer des possibilités de tri alphabétique (lire tout le reste pour piger).


3 - Pourquoi les présentations sont-elles si limitées ?
Je commence par la bonne nouvelle : nous avons l'inestimable chance que le système ne filtre pas ces 32 caractères magiques.

Bon, maintenant, toutes les mauvaises nouvelles : certaines contraintes nous empêchent d'avoir toute liberté sur ces codes de contrôle. Et à bien les observer, on peut se poser certaines questions sur la logique qui sert de dénominateur commun à toutes ces "commandes". En tout cas, une chose est certaine, leur existence n'est pas née de la nécessité de décorer les catalogues.

Petit résumé des pires contraintes observées par T&J...

Taille limitée : En effet sur un catalogue de 2ko, il faut considérer que (à quelques bidouilles masochistes près), seuls les noms de fichiers sont exploitables, avec les contraintes que le système affiche des tas de trucs dont on se fout "autour" et "au milieu". Par exemple, on a 8 caractères, puis un point qui est ajouté par le système (libre à vous de gaspiller des octets pour l'éviter), puis 3 caractères, puis enfin un fatras de texte inutile et variable (" 21K" par exemple, parfois assorti d'un retour chariot ou d'espaces). Donc sur 64 entrées au catalogue (de 32 octets chacune), on ne peut utiliser que (8+3)x64=704 octets desquels naturellement on gaspillera quelques ressources pour éviter au système d'afficher n'importe quoi... dans le cas d'un démarrage en ùCPM ! Sinon, c'est réduit à 63 entrées (693 octets) car il faut en réserver une pour un vrai fichier de lancement.

La bonne nouvelle, c'est qu'il est possible de gagner énormément de place pour qui est astucieux et patient. Le code en caractères de contrôle, ça s'optimise aussi !

Suppression d'un bit : Comme si le ciel était trop clément, il faut que le système filtre le bit de poids fort à tout ce qui est lu, sans discrimination d'age, de sexe, de couleur ou autre. Non, je ne m'énerve pas. Mais je viens de me rappeler le jour où j'ai compris pourquoi on ne pouvait pas faire de jolis dessins dans un catalogue. Tous les caractères graphiques sont à partir du CHR$ (128) ! ! ! Quelle damnation... Il nous reste donc les chiffres, l'alphabet latin minuscule et majuscule, la ponctuation, et quelques caractères douteux qui diffèrent d'un clavier à l'autre (discrimination sur la langue !).

La bonne nouvelle, c'est qu'il existe quelques caractères graphiques cachés à la place des codes de contrôle 0 à 31. Pour les afficher, il suffit d'utiliser CHR$(1) juste avant. Exemple : FOR x=0 TO 31:PRINT CHR$(1);CHR$(x);:NEXT x

Tri alphabétique : Par cette nuit d'orage, sachez aussi que les instructions (noms de fichiers) sont d'abord triées par ordre alphabétique. C'est à dire que vous devez avant toute chose ordonner vos instructions par un indexe qui sera lu et interprété en fonction du mode graphique courant. C'est à dire ? Et bien que sur les 11 rares octets de chaque ligne, il faudra que le premier permette un classement alphabétique "favorable" des instructions. Le problème, c'est que cet octet sera lu et interprété comme les autres si vous ne le cachez pas à l'affichage (voir + loin comment faire). Le problème, c'est encore et aussi que le classement alphabétique est différent si vous êtes en mode 0, 1 ou 2, dans la mesure ou les noms de fichiers sont affichés selon 4, 2 et 1 colonnes (je vous épargne la commande ùDIR qui se permet même 5 colonnes en mode 2 avec un tri et un affichage différent).

La bonne nouvelle, c'est que d'une part, tout le monde (ou presque) lance son catalogue depuis un reboot du CPC, systématiquement (ou presque) en mode 1. Donc on peut considérer ce mode comme étant un point de départ par défaut. L'autre bonne nouvelle, c'est qu'il est possible de ne pas tenir compte de l'ordre des commande si chacune d'entre elle est autonome (voir + loin).


4 - Bestiaire monstrueux
Et maintenant un petit tour d'horizon des caractères de contrôle dans l'ordre mais avec un sous-titre de l'expert (moi).

&00 : Correspond à un NOP. C'est à dire qu'il sert de remplissage, et ne fait rien. Mais c'est toujours mieux que rien d'avoir une fonction qui permet de ne rien faire quand on est parfois limité par la place (il me reste 2 octets, et il m'en faut 4 pour mettre une couleur, qu'est-ce que je fais ? Ben j'attends jusqu'à ce que j'ai 4 octets en mettant &00,&00).

&01 : Lot de consolation, il permet d'afficher un caractère bonus "caché" derrière les caractères de contrôle. Par contre, ça coûte 2 octets pour chacun de ces caractères, car il faut afficher &01,&xx pour chaque caractère.

&02 et &03 : CURSOR 0 et CURSOR 1. Pas encore compris l'intérêt pour les catalogues. En fait, le curseur semble automatiquement viré pendant le catalogue et remis après.

&04 : MODE. On peut voir la bouteille à moitié vide en disant que c'est inutile si on considère un catalogue en mode 1, vu que de toutes façons on part sur du mode 1. Oui, sauf que dans tous les autres cas, on a l'avantage d'une commande qui se placera alphabétiquement en première ligne du catalogue et qui a l'avantage de faire un reset de la WINDOW en cours. C'est toujours plus propre. À savoir que cette commande permet aussi de mettre le PAPER 0 dans le fond même si le PAPER actif est autre. Et puis il y a des tas de choses à faire en mode 2 ou 0 !

&05 : TOTALEMENT INUTILE ! Vu que ça concerne de l'affichage graphique et qu'il est purement impossible de positionner le curseur graphique (par défaut en dehors de l'écran), l'utilisation de cette commande permettra simplement de faire du graphisme en 320x1 (ligne du bas de l'écran) avec l'encre 1 (par défaut). Super !

&06 : Active l'écran (voir &15).

&07 : Bip (tout naze).

&08, &09, &0A et &0B : Déplacement relatif du curseur de 1 caractère respectivement vers la gauche, la droite, le bas et le haut. Attention ! &08 n'efface pas systématiquement, c'est simplement un déplacement. Utile pour économiser des octets par rapport au locate quand c'est possible.

&0C : CLS. Pratique aussi pour faire des tempos : par exemple, vous voulez marquer une pause, il suffit de définir une Window en dehors du graphisme visible et de balancer plein de &0C. C'est assez long. Pratique.

&0D : Place le curseur sur le bord gauche de la fenêtre. Pratique pour économiser un locate, surtout si on veut afficher tout le temps au même endroit (faire un dessin animé par exemple). Ça coûte un WINDOW au départ, mais après, un &0D suffit à positionner le curseur.

&0E : PAPER. Toujours utile si vous voulez afficher un carré, car il n'est que dans les 128 caractères interdits. Ou sinon, pour avoir le négatif d'un caractère... en étant un peu tordu et créatif, ça peut donner qqch... Surtout bien si vous voulez faire un CLS avec une couleur donnée.

&0F : PEN. Permet de cacher ce qui s'écrit. Par exemple, on ne se soucie plus de savoir ce qu'écrit le système en l'activant/désactivant. Avec un PEN 0 sur PAPER 0, il écrira sans que ça se voit (par contre éviter de le laisser écrire sur le reste). Ça permet par exemple de redéfinir la palette sans se soucier de l'affichage (utile en mode 0 !).

&10 : Efface le caractère courant. J'ai pas encore trouvé l'utilité. En fait, c'est comme un espace, mais qui déplacerait pas le curseur... mettons que ça peut toujours servir si vous êtes en mode transparent.

&11 et &12 : Sorte de CLS entre le bord gauche (ou bord droit) et le curseur. Pratique pour dessiner des rayures horizontales. Pour des rasters bien épais par exemple.

&13 et &14 : CLS entre le début (ou fin) de la fenêtre et le curseur. Pratique pour faire une petite tempo sans définir une WINDOW à chaque fois. Un LOCATE suffit.

&15 : Permet de désactiver l'affichage. Ça veut dire quoi ? Qu'aucun caractère (commande on non) ne sera pris en compte tant qu'un &06 ne passera pas. C'est vital pour éviter d'afficher tout le merdier du système, et aussi le caractère qui permet d'indexer les lignes de commande. Le problème, c'est que si on fait ça à chaque ligne, on perd 2 octets à chaque entrée. Reste 63x(8+3-2)=567 octets, ça part vite, mine de rien... heureusement, y'a des bidouilles pour économiser un peu...

&16 : Mode transparent. Très utile ! Pour avoir un peu de finesses dans ce monde brutes (arrière-plans etc.).

&17 : INUTILE ! Les mode XOR, AND et OR ne sont exploitables qu'en affichage graphique, donc, seulement à la ligne du bas, à l'endroit du curseur graphique.

&18 : échange PAPER et PEN. L'intérêt c'est que ça prend qu'un octet.

&19 : INUTILE ! La commande SYMBOL pourrait fonctionner, même avec peu de caractères, mais il faudrait pour cela que le système autorise à afficher les caractères au-delà de 127, ou bien autoriser la redéfinition d'un caractère inférieur à 127. Bref, une pire déception.

&1A : WINDOW. Très utilisé notamment par les chers Prodatrons pour dessiner un rectangle plein lorsqu'il est associé à un PAPER puis CLS.

&1B : NOP. Y'en avait déjà un, mais on sait jamais desfois que l'autre tomberait en panne, comme ça, juste histoire de gaspiller un emplacement pour une fonction ! Je m'en suis bien servi une fois, mais c'était une sombre histoire de tri alphabétique...

&1C : INK. Ce qui est vraiment ballot, c'est que ça coûte 4 octets pour définir une simple couleur, sachant qu'il faut lui donner 2 encres au cas où on voudrait que ça clignote. Mais bon, exit la flashouille, vu que la commande SPEED INK n'existe pas !

&1D : BORDER. Pareil, ça coûte 3 octets au lieu de 2.

&1E : Home pour le curseur. Peut avoir le même genre d'utilité que &0D

&1F : LOCATE. Autant dire que c'était mal parti de quoi que ce soit d'intéressant si cette commande n'existait pas. Attention, toutefois, les coordonnées du caractère ne fonctionne pas comme l'instruction basic : les positions démarent à 0 et non à 1 décalant ainsi tout d'un caractère.


5 - Concrètement, on fait comment ?

Un peu de méthode
D'abord, vous testez votre idée en basic, parce que c'est finalement ce qui s'en rapproche le plus. Ça vous permettra de voir si l'effet vous convient. Ensuite, il est question de retranscrire cet effet sur la disquette au moyen d'un éditeur de piste. Cataclysme peut être d'une aide précieuse à cette étape. La finition devra se faire de préférence avec 2 CPC, l'un pour éditer le catalogue, l'autre pour en tester le résultat. Targhan préfère faire cette double manipulation sur émulateur, et jongler entre les DSK et les Snapshots, ce qui semble assez efficace.

Les outils :
CATaclysme :
Il est le seul outil vraiment dédié à la création de Catalogues à ma connaissance. Il est très simple à utiliser. Même s'il ne permet pas d'optimer chacun des octets de votre disquette, il permet de gagner beaucoup de temps sur la mise en place d'un résultat. Par exemple, je l'ai utilisé pour le début du CATalogue de Halloween Demo Contest, pour ensuite apporter les éléments spécifiques. Une fois bien positionnés vos éléments, vous allez commencer à les placer sur les secteurs du catalogue. Cataclisme vous facilite cette tâche tout simplement. Dans beaucoup de cas, il sera suffisant, dans d'autres cas, vous aurez besoin de mettre le nez dans les secteurs avec un éditeur de pistes pour surveiller que chaque octet soit bien à sa place. Il faut le considérer comme une mise en bouche pour apprendre. MAis rapidement, il devient indispensable de tout faire directement avec un éditeur de disquette.

Disc + Ultra :
Je le connais assez peu. Certaines fonctions semblent intéressantes, mais son ergonomie ne vaut pas celle de Discologie. Avantage : vous voyez sur un unique écran les 64 entrée du CAT en mode éditeur de catalogue, alors que Discologie n'en montre que 8. Mais l'édition est laborieuse et les octets représentés sous forme graphique ne permettent pas la vue d'ensemble qu'on espérerait. Il est l'éditeur de disque qui ressemble à Discologie, mais avec beaucoup moins de fonctions. À noter pour ceux qui travaillent sur CPC : je n'ai pas trouvé à changer les couleurs blanches fatigantes de cet écran. Bref, je trouve qu'on est loin de Disco.

Parenthèse sur Discologie :
Discologie est relativement pratique, bien qu'assez long à charger. Il est probablement le plus pratique de tous. Mais il peut poser des problèmes si vous souhaitez travailler sur émulateur. L'utilisant assez fréquemment, je me permets de vous donner quelques conseils sur son utilisation. Tout d'abord, le plus pratique est d'activer l'option "ordre numérique" au lieu de "ordre logique", ce qui permet d'utiliser les fonctions "suivant / précédent" pour passer directement d'un secteur du CAT à l'autre lorsqu'ils sont entrelacés. Activez aussi l'option "changement manuel" pour éviter qu'il ne change de piste si vous débordez, perdant ainsi tout le travail que vous venez de faire sur un secteur. À noter que Chany a fait une version ROM de cet éditeur avec toutes les options précitées, téléchargeable en section softs. Ensuite les fonctions de copie / remplissage sont très pratiques. Mais il est prudent d'en connaître un bug : lorsque vous copiez les entrée ABCD de A vers B pour obtenir AABCD, vous obtiendrez en fait AAAAA, car il écrase les données qu'il allait lire. Dans ce cas, il est préférable de faire "couper", puis "coller", qui n'a pas ce problème. La fonction "rechercher" aussi m'a une fois sauvé la vie, alors que je débuggais : un octet parasite &06 semblait perturber le bon déroulement des opérations, j'ai facilement pu le trouver.


6 - Description physique d'une entrée de CAT :
À quoi ressemblent les octet sur l'éditeur ? Numérotons les octets par exemple de la façon suivante :

00 01 01 01 01 01 01 01 01 02 03 04 05 05 05 05
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06

00 : c'est le USER. En fait, par défaut, il est conseillé de mettre le USER à 0 si vous voulez que l'instruction apparaisse normalement.

01 : ils constituent les 8 premiers caractères du nom de fichier. Après avoir affiché ces 8 caractères, le système affichera un point.

02-03-04 : ce sont les 3 caractères de l'extention du fichier. À la suite, le système mettra soit des espaces, suivis éventuellement de la taille du fichier, ou d'un retour chariot. Si le bit de poids fort de l'octet 03 est à 1, alors le fichier sera caché. Si le poids fort de l'octet 02 est à 1, alors le fichier sera protégé en écriture.

05 : ce sont des octets lus par le système, qui permettent d'indiquer en combien de morceaux est constitué le fichier, quel est le numéro du morceau courant et quelques autres informations techniques sur le fichier.

06 : Ces octets indiquent au système quels sont les secteurs de la disquette contenant ce fichier.

Seuls les octets en gras sont affichés tels quels par le système. Les autres sont de sa propre composition, comme le point, ou la taille du fichier.

On peut résumer l'affichage final de cette façon pour chaque entrée utilisée :

01 01 01 01 01 01 01 01 (point) 02 03 04 (espaces suivi éventuellement d'une taille en chiffre puis "K" et/ou retour chariot). La suite de l'article présentera les entrées de cette façon :

06 -- -- -- -- -- -- 17 (point) -- -- 15
(index) 06 -- -- -- -- -- 17 (point) -- -- 15

La valeurs &15 permettent d'interdire au système l'affichage, et donc ne pas montrer les horreurs du système. L'octet &06 permet d'autoriser à nouveau cet affichage. Il est parfois précédé d'un octet d'indexage (voir plus loin). Le &17 permet de ne pas afficher le point du système (explication plus loin).



>>> suivant >>>