Le Chat Mauve sur Apple II

[update 05/06/2022: Correction du support Double LoRes sur EVE]
[update 12/08/2020: Suppression de la mention du charset programmable sur la EVE, qui est en fait une couche software en HGR]
[update 20/02/2020: Correction du support de modes de la Féline et adaptateur IIc]

Dans ma quête d’informations sur les Apple II, une marque de cartes d’extension revient très souvent. Reconnue déjà à l’époque par la qualité de leur produits, elle s’était imposée très rapidement en France à cause d’une demande toute bête : obtenir une image couleur.

En effet les premiers Apple II vendus sur le territoire européens étaient des modèles NTSC modifiés pour générer les synchros PAL mais sans couleur sur la sortie composite. Puis vinrent les modèles PAL avec modulateur couleur, incompatible avec les téléviseurs français SECAM (on obtenait toujours du noir & blanc). Et enfin le modèle compact Apple IIc, lui aussi ne sortait qu’un signal composite noir & blanc dans sa version PAL.

Résultat de recherche d'images pour "apple le chat mauve"

La société française Le Chat Mauve va rapidement proposer des cartes avec sortie RVB pour pallier ces défauts. Ce choix va s’avérer payant puisque dès 1981 la loi française va rendre la Péritel RVB obligatoire sur tous les nouveaux téléviseurs, ce qui va rendre ces cartes incontournables en France. Le Chat Mauve aura pignon sur rue en France et Apple modifiera même le design de l’Apple II pour router les signaux nécessaires à ces cartes sur un slot dédié (sur les premiers modèles, il fallait sortir le fer à souder). La dernière carte Le Chat Mauve sera directement brandée Apple et proposée systématiquement aux acheteurs d’Apple IIc en France.

Le Chat Mauve est pourtant une marque qui est restée inconnue aux USA, tout simplement parce que la sortie composite NTSC suffisait largement aux utilisateurs de l’Apple II : pourquoi racheter une carte chère en plus ? Il existait même d’autres fabricants de cartes RGB aux USA, qui ont eu un insuccès total. De la même manière, dans le reste de l’Europe en PAL, la sortie composite PAL faisait l’affaire pour la majorité des utilisateurs.

Ce qui est plus surprenant c’est que les cartes Le Chat Mauve proposaient des modes graphiques plus variés que la sortie composite de l’Apple II, mais qu’ils n’ont jamais été vraiment utilisés. Ceci peut s’expliquer par le nombre de territoires concernés mais surtout… par l’absence totale de rétro-compatibilité entre les modes ! Une carte plus récente ne supportait pas les modes des plus anciennes. Avouez qu’on a vu mieux.

Avant de détailler les cartes Le Chat Mauve, un petit résumé de ce qui existe par défaut sur la gamme Apple II s’impose quand même.

Modes vidéo standard Apple II

La couleur sur Apple II

Petite parenthèse sur la génération couleur sur Apple II, qui soulève beaucoup de questions quand on s’y penche.

Un article de référence : Apple II graphics sur Wikipedia

L’Apple II est fondamentalement une machine qui génère un signal uniquement noir et blanc, fait de points noirs et de points blancs (0 et 1 en mémoire). Il n’y a aucun mécanisme hardware qui va faire une correspondance avec une palette prédéfinie, par exemple.

Très tôt dans la conception de l’Apple II, Steve Wozniak va se renseigner sur la génération des couleurs dans le signal NTSC et se rendre compte que la chroma utilise une modulation d’amplitude en quadrature (QAM). Ce système présente la particularité de pouvoir générer 16 teintes « pures » avec des signaux maximum sur chaque phase, donc codables sur 4 bits. En générant les bons patterns de 0 et de 1 par paquet de 4 et en les envoyant dans le signal de modulation chroma (colorburst), on peut alors générer 16 teintes différentes sur chaque cycle de colorburst.
[NB: Ce principe sera repris plus tard par le CGA en version améliorée. Le CGA standard peut générer ~1000 couleurs en composite.]

Donc, par défaut, l’Apple II va envoyer ses 0 et ses 1 à la fois dans la luma et dans la chroma du NTSC. Ce qui a comme conséquence de générer des couleurs de façon purement analogique, mais aussi de produire nombre d’artefacts de chroma. Ceci est visible surtout en mode haute résolution, car là où on devrait s’attendre à des pixels bien rangés, on va avoir tout un tas d’interférences bizarres entre eux.

Globalement, seul le mode GR génère des couleurs correctes en NTSC car le cycle de colorburst est complet avec 4 bits par cycle, répétés 3,5 fois. À cause du 0,5, en NTSC on observe des artefacts lorsqu’on passe d’un gros pixel GR à l’autre.

En HGR, l’Apple II ne peut plus qu’envoyer que 2 bits par cycle, ce qui limite le nombre de couleurs à 4. Les couleurs dépendent de la phase de modulation qui peut être modifiée.

Une autre idée reçue est que dans les modes graphiques haute résolution, l’Apple II envoie la couleur d’un pixel, puis celle du pixel suivant, etc. En réalité il s’agit d’un flux de 0 et de 1, donc dans la séquence 010011 en HGR (par exemple), on aura 01 sur un cycle de colorburst, 10 à cheval sur deux cycles, 00 sur un cycle, 01 à cheval, 11 sur un cycle, etc. Les front montants et descendants (changement de valeur de bit) génèrent des artefacts de couleur.

Le cas des couleurs en PAL composite

Après plusieurs tests sur un Apple IIe PAL (merci Grouik/FT) et l’analyse de la documentation disponible, nous avons pu constater que le rendu sur les machines européennes en composite est identique au rendu des machines NTSC – et même légèrement plus propre.

Ceci concerne toutes les machines avec des modulateurs PAL intégrés ou avec la cartes Eurocolor d’Apple : le signal PAL est en fait regénéré à partir de la chroma NTSC.

Une seule différence notable : en mode mixte, la chroma est désactivée sur le texte en bas de l’image (défaut des moniteurs NTSC).

TEXT

Le mode par défaut, disponible sur tous les Apple II (et même l’Apple I en fait).
40 colonnes, 24 lignes. Chaque caractère fait 7×8 points.

Les points sont doublés horizontalement donc la largeur d’un caractère correspond à 14 points graphiques.

Entièrement noir & blanc, le charset est dans une ROM non accessible et non modifiable en software.

Mode TEXT

TEXT80

Disponible uniquement avec une extension mémoire de 1ko sur une banque mémoire séparée (AUX). Le générateur vidéo va alors lire simultanément la banque mémoire principale et la banque mémoire AUX, et multiplier par deux la fréquence de génération des caractères. Les points sont plus fins mais le charset est le même.
80 colonnes, 24 lignes. Chaque caractère fait 7×8 points.

Comme les points ne sont plus doublés, il est conseillé d’utiliser un moniteur monochrome avec ce mode pour un meilleure précision d’affichage.

Mode TEXT 80 colonnes

GR – Basse résolution

40×48, 16 couleurs

C’est un mode dérivé du mode TEXT. Au lieu de générer des caractères, ce mode répète un pattern de quatre bits qui va au final donner 16 teintes possibles dans le signal NTSC. La taille des pixels permet cette répétition sans problème d’interférences.

Chaque pixel fait 14×4 points. Il me semble que les patterns sont dans la même ROM que le charset texte.

Le mode GR sur un écran composite couleur
La même image GR sur un écran monochrome : on voit la répétition des patterns de 0 et de 1 qui génèrent la couleur une fois envoyés dans la chroma du NTSC.

DGR – Double basse résolution

80×48, 16 couleurs

Nécessite au minimum une extension mémoire « 80 colonnes » (1ko).

En utilisant la même astuce que pour TEXT80, on peut avoir alternativement un pixel dans la banque mémoire principale et le pixel suivant dans la banque mémoire AUX.

Chaque pixel fait 7×4 points.

Écran final de latecomer en DGR (+ mode mixte TEXT activé)

HGR – Haute résolution

280×192 (monochrome/couleur)

Ce mode permet d’accéder à chaque point de façon individuelle, ce qui était inédit pour l’époque. En contrepartie, il consomme 8ko de RAM, ce qui était beaucoup.

Chaque point est doublé (comme en mode TEXT) par manque de bande passante sur le bus. Il en résulte qu’on ne peut pas obtenir les 16 couleurs disponibles en GR car on ne peut avoir que 4 combinaisons par cycle de colorburst : 00, 01, 10 et 11.
00 et 11 sont respectivement noir et blanc, 01 et 10 génèrent deux couleurs qui sont orange/bleu ou violet/vert.
Les tout premiers Apple II ne pouvaient générer que le premier groupe de couleur, et rapidement Wozniak a rajouté la possibilité de changer la phase de chroma tous les 7 points, ce qui permet de basculer entre chaque groupe de couleur tous les 7 bits.
Lorsque la phase est changée, les points shiftent visuellement vers la droite en NTSC monochrome.

Le HGR dans toute sa splendeur (Wikipedia)

Vous verrez parfois que le HGR a une définition couleur de 140×192, mais c’est une simplification qui n’est pas exacte.

Il ne s’agit PAS d’un mode purement numérique comme on a l’habitude. En couleur la définition reste bien de 280 colonnes, mais la taille des « pixels » varie en fonction des couleurs générées.

Par exemple la séquence : 00 01 01 00 va générer pour chaque bit : noir/noir/noir couleur01/couleur01/couleur01, noir/noir. Donc ici les pixels de couleur fait trois points (donc 1,5 « pixel »).
Alors que 00 01 01 01 00 va générer un point de couleur (le premier 1) suivi de quatre points de couleurs (01 01). Sans compter l’interférence à la fin (1 00).

Autre exemple : 00 00 10 00 ne génèrera qu’un point de couleur (le 1, de couleur 10) au milieu du noir.

Dessiner dans ce mode en couleur est un vrai parcours du combattant.

DHGR – Double Haute Résolution

560×192 monochrome/couleur

Comme pour le TEXT80 et le DGR, on va utiliser la mémoire AUX pour doubler la bande passante du bus. Résultat, ce mode demande 16ko de RAM.
La plupart des extensions « 80 colonnes » ne fournissant que 1ko de RAM, ce mode n’est possible qu’avec des extensions mémoire de 64ko, sur Apple IIe ou Apple IIc.

Contrairement au HGR, les points ne sont plus doublés, et on a accès directement aux 16 nuances du GR.

Cependant, et vous voyez peut-être l’enfer arriver, le problème est exactement qu’en HGR : les pixels ne font pas strictement 4 bits car leur taille dépend de leur couleur et de celle des points voisins. Grosso modo il faut répéter la couleur deux fois (4×2=8 bits) pour être sûr d’avoir au moins 5 points de la bonne couleur.

De plus avec 16ko à adresser sur deux banques mémoire, ce mode est extrêmement lourd à gérer pour un 6502 à 1Mhz.
[surtout que je n’ai pas parlé de l’organisation interne des framebuffers qui est un ENFER !]

Il ne sera utilisé que par une poignée de jeux, le plus célèbre étant Prince of Persia avec son écran titre en DHGR.

Title Screen de Prince of Persia en DHGR composite

Un développeur a fait la liste de toutes les combinaisons de couleurs possible et a réussi à faire un convertisseur BMP>DHGR de façon empirique, avec d’excellents résultats…

Conversion moderne en DHGR composite

Modes « mixtes »

Tous les modes graphiques standard peuvent être utilisés dans ce qu’Apple appelle le mode « mixte ». Cela signifie que la partie supérieur de l’écran est en mode graphique, et la partie inférieure en mode TEXT, pour laisser exactement 4 lignes de texte.

Il faut cependant noter qu’en NTSC, les lignes de textes sont pleines d’artefacts couleur car la chroma est toujours décodée. La documentation n’est pas hyper précise sur le sujet, mais après quelques recherches il semblerait que le chromaburst est effectivement désactivé sur les lignes de texte et que le coupable serait les moniteurs NTSC qui, par design, continuent à considérer que le reste de l’image est en couleur – les switchs de mode couleur/N&B en NTSC s’effectuaient avec un certain délai car le signal NTSC hertzien était très sensible et le chromaburst pouvait être perdu accidentellement sur quelques lignes.
Le problème n’est pas présent sur les modèles PAL, car le signal composite PAL généré prend bien en compte la désactivation du chromaburst sur les lignes de texte.

La seule limitation de ce mélange est que l’accès aux banques mémoire sera identique pour le mode graphique et pour les 4 lignes de texte. Par exemple en mode HGR, le texte sera en 40 colonnes, et pour le DHGR le texte sera en 80 colonnes.

Exemple de mode mixte HGR/TEXT en composite NTSC avec les artefacts de couleur sur le texte.

Les cartes Le Chat Mauve

Il y eut en tout trois cartes Le Chat Mauve et un adaptateur.

RVB Graph

Apparemment compatible avec les Apple II et Apple II+, cette carte supporte tous les modes standards Apple II d’après la documentation, ce qui devait correspondre à l’époque à tous les modes avec une unique banque mémoire (donc TEXT, GR et HGR).

Elle rajoute une gestion étendue des couleurs en HGR.

Le Chat Mauve RVB Graph
(Apple II Documentation Project)

EVE

La carte la plus ambitieuse de la société. Elle rajoute d’emblée 64ko de RAM, donc certainement pour Apple IIe minimum. Elle supporte les modes vidéos standards suivants : TEXT, GR, HGR, TEXT80, DHGR (pas de Double LoRes) et rajoute plusieurs modes inédits. Non rétro-compatible avec le mode HGR de la RVB Graph.

Nécessite un slot double, présent dans les Apple IIe PAL.

Cette carte existe en 2 révisions, REV A et REV B (cf le mode DHGR COL140 plus bas).

Le Chat Mauve EVE
(Apple II Documentation Project)

Féline

La Féline propose une extension mémoire de 64ko et supporte tous les modes standards Apple IIe.

Elle abandonne tous les modes spécifiques à la carte EVE et RVB Graph, mais introduit le mode DHGR COL140 mixte.

Le Chat Mauve Féline
(Apple II Documentation Project)

Adaptateur IIc

L’Apple IIc ne produisant pas de signal PAL couleur en composite, Le Chat Mauve réussit à mettre toute la logique de la carte Féline dans cet adaptateur, aidés par Apple qui produisit tous les signaux nécessaires sur le port d’extension du IIc. Seule l’extension mémoire n’est pas incluse (inutile car le IIc l’intègre déjà par défaut).

Cet adaptateur supporte le mode DHGR COL140 mixte comme la carte RGB Apple et la Féline.
Il est brandé « Apple » : c’est un accessoire officiel.

À noter cependant, cet adaptateur a tendance à switcher dans le mauvais mode DHGR si le logiciel ne respecte pas exactement les spécifications d’Apple pour le déclencher. Ça peut donner des résultats embêtants, par exemple l’écran titre de Prince of Persia passe en noir et blanc après la première boucle de démo.

Le Chat Mauve //c RVB PERITEL Apple

Modes vidéo Le Chat Mauve

TEXT/TEXT80

Fonctionne exactement de la même manière qu’en composite.

Seule différence : les cartes détectent que le mode texte est activé (pin spécifique sur le slot), et désactivent la chroma dans ce cas, surtout dans le mode mixte graphique/texte.
Résultat, le texte est parfaitement lisible dans tous les cas sur un écran couleur.

TEXT couleur (RVB Graph)

La RVB Graph permet de redéfinir la couleur du mode texte via un registre de couleur. Les 16 couleurs du mode GR sont utilisables et s’appliquent à tout le texte visible à l’image.

TEXT couleur (EVE)

La carte EVE permet de switcher la couleur texte de blanc à vert monochrome en 40 ou 80 colonnes.

Mais en 40 colonnes elle permet aussi d’assigner une couleur foreground/background différente à chaque caractère. Les informations de couleur sont stockées dans la banque de mémoire AUX et il est également possible d’indiquer à la carte les couleurs par défaut pour tous les nouveaux caractères.

À noter : ce mode existe aussi sur la carte Apple RGB mais ne s’active malheureusement pas de la même manière.

GR

40×50, 16 couleurs

Fonctionne exactement de la même manière qu’en composite.

Le signal est plus propre et les interférences entre les pixels disparaissent.
La palette de couleurs générée est par contre sensiblement différente.

DGR/Double LoRes (Féline, IIc)

80×50, 16 couleurs

Le mode GR avec le double de colonnes (l’équivalent du mode TEXT 80 colonnes).
N’est pas supporté par la carte EVE alors que c’est un mode standard sur IIe.

HGR

Différence de rendu assez importante entre le mode standard et les cartes Le Chat Mauve.

Sur LCM on peut résumer le rendu avec cet algorithme suivant:

  • Chaque ligne est découpée en « cellules » de deux bits donnant 4 valeurs : 00, 01, 10 ou 11
  • 01 et 10 donnent la couleur 1 ou la couleur 2 mais ces couleurs ne sont pas directement appliquées aux points
  • Ensuite on prend chaque point en regardant les points adjacents, ce qui donne 8 valeurs possibles : 000, 001, 010, 011, 100, 101, 110, 111 (un point adjacent en dehors de l’écran est considéré comme étant 0)
  • Si on a 010 ou 101, alors le point du milieu est de la couleur de la cellule dont il fait partie (définie à l’étape 2)
  • dans les autres cas, le point du milieu est blanc si 1, noir si 0.

Comme en HGR normal, les couleurs dépendent de la phase appliquée à la chroma – définie par le bit de poids fort de chaque octet en RAM.

Ce mode existe également sur la carte Apple RGB.

HGR étendu (RVB Graph)

Sur la RVB Graph, il est possible de redéfinir les couleurs HGR grâce à des registres de couleur.

On passe alors d’un mode à 6 couleurs fixe, à un mode 6 couleurs programmables sur 16.

De plus la RVB Graph offre aussi la possibilité de faire apparaître les points adjacents de même couleur comme s’ils étaient liés (comme en HGR normal) ou bien de n’allumer que les points qui correspondent effectivement à des bits à 1. Une ligne horizontale apparaîtra alors en pointillés.

HGR SPEC1 (EVE)

Identique au HGR normal sauf que les points à 0 au milieu de blanc (donc dans la configuration 11011) ne prennent pas la couleur de leur cellule mais sont affichés en noir.

HGR SPEC2 (EVE)

Identique au HGR normal sauf que les points à 1 au milieu de noir (donc dans la configuration 00100) ne prennent pas la couleur de leur cellule mais sont affichés en blanc.

HGR DASH (EVE)

Comme pour le mode HGR étendu du RVB Graph, ce mode n’affiche en couleur que les points qui sont à 1. Une ligne couleur horizontale apparaîtra en pointillés.

HGR BW (EVE, Féline, IIc)

280×192 monochrome

Mode HGR standard dont la chroma est entièrement désactivée.

Ce mode existe également sur la carte Apple RGB.

HGR COL280A, COL280B (EVE)

140×192, 4 couleurs

C’est un HGR sans les interférences du NTSC, tel qu’on pourrait le définir de façon moderne, où chaque pixel est indépendant.

La différence entre le COL280A et le COL280B réside uniquement dans les couleurs utilisées car on ne peut plus changer de groupe de couleur à la volée. Chaque mode dispose de deux couleurs fixes en plus du noir et du blanc (ce sont les couleurs HGR classiques).

HGR CP280 (EVE)

280×192, duochrome

Utilise les deux banques mémoire en simultané. La banque principale contient l’image bitmap (1 bit) sur la zone mémoire normalement utilisée par le HGR. La banque AUX définit sur chaque octet la couleur 0 et la couleur 1 (4 bits par couleurs) pour chaque zone de 7 points.

La documentation indique que ce mode « est appelé à devenir le standard en la matière ». Cela ne sera malheureusement jamais le cas… j’imagine que son implémentation en NTSC aurait demandé une complexité non voulue par Apple.

Mode HGR CP280 (Manuel EVE)

DHGR COL140 (EVE, Féline, IIc)

140×192, 16 couleurs

Là encore une différence majeure de rendu avec le DHGR standard.

Sur les cartes Le Chat Mauve, c’est simple : 4 bits = une couleur. Chaque pixel fait 4 points.

Clair, net et précis.

Comme le rendu est différent du DHGR standard, les images prévues pour le DHGR NTSC, avec leurs pixels de taille variable, sont nettement moins belles sur les cartes Chat Mauve.

DHGR NTSC / DHGR Chat Mauve

Précision : comme la carte EVE est sortie avant le mode DHGR officiel d’Apple, les révisions A de la carte EVE n’appliquent pas les bonnes couleurs DHGR aux patterns de 4 bits. Ceci a été corrigé dans la Revision B.

Ce mode existe également sur la carte Apple RGB.

DHGR BW560 (EVE, Féline, IIc)

560×192 monochrome

Mode DHGR dont la chroma est entièrement désactivée.

Ce mode existe également sur la carte Apple RGB.

DHGR COL140 mixte (Féline, IIc)

140×192 16 couleurs + 560×192 monochrome

Le mode DHGR COL140 mixte reprend le rendu du mode DHGR COL140 tout en exploitant le bit de poids fort de chaque octet mémoire (inexploité en DHGR standard).

Ce bit permet de basculer du mode couleur 140×192 au mode monochrome 560×192 tous les 7 points. Cependant la bascule ne s’applique que tous les multiples de 4 points pour éviter de changer de mode au milieu d’un pixel couleur.

Ce mode est notamment utilisé par le logiciel de dessin Extasie.

Démonstration du mode DHGR COL140 mixte dans Extasie

Comme le monochrome se déclenche lorsque le bit de poids fort des octets est à 0, ce mode peut générer des incompatibilités avec le DHGR classique lorsqu’il est actif.

Ce mode existe également sur la carte Apple RGB.

L’héritage des cartes Le Chat Mauve

Contrairement à ce qu’on aurait pu penser à l’époque, et contrairement à ce qu’espérait Le Chat Mauve, Apple ne reprit aucune de leurs innovations ni les leurs (avec la carte Apple RGB) dans les déclinaisons suivantes de l’Apple II.

Ni les versions ultérieures du IIe ou du IIc n’auront les modes des cartes Eve et Féline par défaut, la sortie composite NTSC restant la seule option officielle.

Notez qu’il existe d’autres cartes RGB dont une officielle Apple basée sur le hardware d’une société Video 7. Elle offrait une sortie TTL et le mode DHGR mixte ainsi que d’autres modes exotiques (un peu comme la EVE). Mais elle se programmait différemment et il semblerait que les couleurs soient vraiment différentes de la palette Apple II officielle.

À la sortie de l’Apple IIgs, qui ajouta de nouveaux modes graphiques RGB, là non plus aucun mode Le Chat Mauve/Apple RGB ne sera présent. Même le mode DHGR COL140 mixte est absent de l’Apple IIgs alors que c’était un des modes les moins compliqué à implémenter.

Reste qu’actuellement, les carte Le Chat Mauve sont assez recherchées car elles n’ont connu aucune réédition moderne. Même la carte VidHD qui permet d’avoir une sortie HDMI sur Apple II n’implémente aucun mode Chat Mauve/Apple RGB par design (ni même la palette Chat Mauve, différente du NTSC)… alors qu’elle implémente un mode IIgs non présent sur les Apple II 8-bits ! Un choix confirmé par les auteurs : comme ils ne se basent que sur le marché américain, ils ne s’intéressent pas au sujet… et c’est quasiment la même chose pour les émulateurs.

Pour aller plus loin : Liste de sites de référence Apple II