Trois nouveaux modes vidéo grâce au CRTC 5
Même si je n’ai pas encore fait de démonstration en Basic de toutes les fonctionnalités offertes par le HD6345, depuis le temps que je lis sa documentation technique je pensais que j’avais listé toutes les fonctionnalités offertes par le composant. Et bien non ! Le bit 3 du registre 31 apporte quelque chose d’inespéré : Trois nouveaux modes vidéo. J’ai découvert ça ce soir et je suis tellement enthousiaste que je ne peux pas m’empêcher de partager l’info avec vous tout de suite. Cet apport pourrait même être exploité avec bonheur dans des démos ou des jeux écrits en assembleur.
Sur le papier, c’est tout simple : Quand le bit 3 du registre 31 est à 1, les scanlines sont doublées. C’est à dire que le CRTC affiche deux fois chaque ligne de pixels. Ça étire donc l’image en hauteur et les points carrés à l’origine (du moins en mode 1) s’allongent pour devenir deux fois plus hauts que larges. Un texte affiché en mode 0 avec ces pixels agrandis donne l’impression d’un mode 1 avec des caractères zoomés. Et on profite de 16 couleurs au passage. Par contre, bien entendu, on ne dispose que de 12 lignes de texte en hauteur.
Il y a tout de même une subtilité : Le fait que le CRTC5 double les lignes fait que les paramètres standards du CPC en ce qui concerne la synchronisation verticale ne fonctionnent plus. Cela nécessite donc une reprogrammation de 3 registres supplémentaires. Les scanlines étant doublées, il suffit de modifier ces valeurs : Le registre 7 passe de 30 à 15, et le registre 4 passe de 38 à 18, le 5 est mis à 4 au lieu de zéro et le 6 prend la valeur 12 au lieu de 25. Il y a quelques subtilités dans ces valeurs, je laisse les plus aguerris du CRTC faire un brin de recherche.
Le petit programme ci-dessous vous permettra d’accéder aux modes supplémentaires. Après son exécution vous pourrez taper « mode 1 », « mode 2 » ou « mode 0 » pour profiter des affichages aux pixels doublés. Vous noterez l’utilisation de la fonction « window 1,20,1,12 » qui est nécessaire à l’affichage en mode 0 pour éviter que le curseur ne disparaisse en bas de l’écran. Le mode 1 appréciera un « window 1,40,1,12 », et le 2 de « window 1,80,1,12 »
20 ' Detection CRTC
30 OUT &BC00,12:a=SGN(INP(&BF00)):OUT &BC00,52:b=SGN(INP(&BF00)):OUT &BC00,44:c=SGN(INP(&BF00)):OUT &BC00,31:d=SGN(INP(&BF00)):crtc=(2-d)*(1-a)+(4*b+(1-c)*(1-b)*5)*a:IF crtc=5 THEN 50
40 PRINT"Ce programme ne fonctionne":PRINT"que sur CRTC 5.":END
50 PRINT"CRTC 5 detecte" : FOR X=1 TO 50:FRAME:NEXT
60 MODE 0
70 OUT &BC00,7:OUT &BD00,15
80 OUT &BC00,6:OUT &BD00,12
90 OUT &BC00,4:OUT &BD00,18
100 OUT &BC00,5:OUT &BD00,4
110 OUT &BC00,31:OUT &BD00,8
120 WINDOW 1,20,1,12
Pour finir, le code Basic permettant de revenir à l’affichage normal est :
10 OUT &BC00,7:OUT &BD00,30
20 OUT &BC00,6:OUT &BD00,25
30 OUT &BC00,4:OUT &BD00,38
40 OUT &BC00,5:OUT &BD00,0
50 OUT &BC00,31:OUT &BD00,0