CODINGAMSLIVE ★ AMSLIVE n°18 - CRTC DÉTECTION ★

AMSLIVE n°16 - CRTC DetectionAMSLIVE n°18 - Crtc DetectionAMSLIVE n°19 - Crtc Detection - Retour Au Source

La science (à l'inverse de la religion) ne prétend pas détenir la vérité, se remettant au contraire en question sans cesse, et toc. Simplement, elle fournit à un moment donné le modèle le plus cohérent possible de notre réalité.
Un défaut dans une théorie est le germe d'une meilleure théorie. Alors que, dans la vie, certaines erreurs engendrent des conséquences dramatiques et que leur repérage n'amène que trop peu souvent leurs corrections, elles fournissent en sciences des informations primordiales. Les fourvoiements maintenant vus comme des briques essentielles de la connaissance, je peux bien avouer l'inaptitude du test CRTC d'Amslive &10 !

HAUTE IMPRUDENCE

Extrait d'un article de « La Manche » :
« Le jeune Romain Giot, issu d'une paisible famille normande, était bien loin d'imaginer l'effroyable mésaventure qu 'il vivrait ce dimanche 15 avril 2001 dans le cadre d'une manifestion semi-culturelle, l ' "Amstrad Expo "

En lançant un programme informatique de sa conception sur son ordinateur personnel, il se rendit compte avec épouvante que le module censé fournir une indication précise de la couleur de l'ordinateur (gris anthracite ou blanc cassé) s'engluait dans l'opaque vase de la méprise.
L'explication tenait en 36 mots : il avait subi d'odieuses expérimentations de la part d'un groupe de personnes scrupuleuses (que l'organisateur nous désignera par la suite sous l'appellation "Mad-RAM7")t et s'était retrouvé branché à un pistolet optique.

La formulation prête à confusion ; nous parlons évidement de l'ordinateur et non de son propriétaire.
Marcel Dore, notre spécialiste cinéma, nous précise :

— Cela est fort simple. L'électronique du pistolet est telle que, sur certains CPCs, la lecture du bus en haute impédance renvoie #7f Ainsi tout test basé sur l'obtention de #ff avec un CPC normal échouera lamentablement. Dans son film Àutokar, Lars Von Trier avait pourtant pointé du doigt l'intrinsèque fragilité des systèmes construits sur de telles hypothèses. »

Par définition, si on ne sélectionne aucun périphérique lors d'une lecture, la valeur lue ne saurait être garantie. La logique TTL veut qu'en haute impédance, on obtienne très probablement #ff, mais rien ne l'assure, comme le prouve l'exemple ci-dessus, ou le cas du CPC+.
Aussi le TEST1 d'Amstrad Live &10 n'est pas fiable.

L'idée resterait exploitable pour la détection des émulateurs autorisant la lecture du VGA, en multipliant le nombre de valeurs afin de rendre improbable toute coïncidence ; mais on aurait bien tort d'encombrer son esprit et la mémoire du CPC pour des programmes de si piètre qualité.
Notez que, pour une raison analogue, une détection du CPC+ par le mode d'interruption im3 n'est pas garantie à 100%.

INTERLUDIQUE

Voyons comment et pourquoi le « Magnum Light Gun » provoque ce phénomène.
Nous nous écartons du sujet, mais nulle déviance ne m'empêchera d'étancher votre soif de connaissances.
Rappelons brièvement le principe général d'un tel périphérique à pointage optique : équipé d'une cellule photo-sensible, il émet une impulsion sur la broche Light Pen Strobe (LPStb) au passage du canon à électron. Le CRTC enregistre alors l'adresse courante, et positionne un flag adéquat (remis à 0 quand le Z80 récupère l'adresse).

Le balayage du moniteur étant en phase avec l'adressage mémoire du CRTC, on obtient effectivement la position du pointeur.
L'état particulier du bit 7 du bus de données, a priori étranger à ce trafic, découle d'une astuce : il est connecté à LPStb quand le Magnum est en état de repos (queue de détente relâchée).

Le bit 7 changeant continuellement, le CRTC fournira sans arrêt des adresses « Light Pen » (registres 16 et 17) différentes.

C'est donc une façon de détecter la présence du pistolet, mais aussi de déterminer quand le joueur appuie sur la queue de détente, puisque dans ce cas l'adresse Light Pen n'évolue plus.
Normalement, le flag « Light Pen Register Full » remplit cet office, mais comme il n'est pas présent sur tous les CRTCs, les concepteurs du Magnum ont dû s'en passer.

BIT 6 AU RAPPORT

(Qui a dit « sexuel » ? Amstrad Live est un fanzine respectable, dans lequel de tels calembours ne sauraient être tolérés)

Nous tenons là une parfaite transition, si chère aux journalistes de radio-audition ou de télé-vision, sans qu'on comprenne bien pourquoi, d'ailleurs ; combien de fois la cohérence logique et le bon goût ont-ils été sacrifiés sur l'autel de la TRANSITION et de l'association d'idées douteuse ?

Bref, comme indiqué dans la notice du composant, le flag Light Pen évoqué ci-dessus se trouve dans le registre de statut. Il s'agit du bit 6, que je considérais à une époque trouble de ma vie définitivement forcé à 1.

Au Croco Chanel 3, Overflow me fit donc part de sa profonde déception de voir un CRTC 1 déclaré comme un type 5 !
Pardon ?

Haute impédance : afin de partages un même bus sans conflit, les Circuits Intégrés connaissent un troisième état (outre 0 et 1), la haute impédance, avec lequel tout se passe comme si le CI était physiquement déconnecté.

NB : L'impédance n'est rien d'autre que la fénération de la résistance ( la grandeur physique , pas le composant !).

; Différences mesurables entre CRTCs
-------------------------------------------------------------------------------------------
; 0 1 2 ; 3 ;4
-------------------------------------------------------------------------------------------
Paramétrage Vsyne (R3) Oui Non Non Oui Oui
-------------------------------------------------------------------------------------------
Lecture registre status (a) (b) (a) (c) (c)
-------------------------------------------------------------------------------------------
Lecture registre 12/13 Oui 0 0 ;Oui Oui
-------------------------------------------------------------------------------------------
Lecture registre 4/5 ;0 0 0 ;rl2/r13 rl2/rl3
-------------------------------------------------------------------------------------------
Effet R2+R3=R0 ;Rien Rien Plus de VSync (d) (d)
-------------------------------------------------------------------------------------------
Bug PPI ;Non Non Non ;Oui Non
-------------------------------------------------------------------------------------------
(a) : état haute impédance. Résultat non exploitable.
(b) : Bit 5= VBL, bit 6= LPStb, autres bit à 0.
(c) : doublon #bfxx.
(d) : décale d-une ligne.
-------------------------------------------------------------------------------------------


L'état du flag à l'allumage de la machine varie suivant les CPCs. Une lecture des registres 16 ou 17 le passe à 0, mais seulement jusqu'à une prochaine impulsion LPStb.

La première mesure d'urgence fut de corriger le TEST2 en filtrant ce bit dont le comportement échappe à tout contrôle.
Mais diantre, cela ne suffit pas. Les CRTC 0 et 2 ne possèdent pas ce registre de statut, et ne daignent pas réagir à la lecture du port #BExx. On rencontre donc un cas de haute impédance.

Ainsi, si on lit #ff, on peut conclure qu'il ne s'agit pas d'un CRTC 1.

Mais si on lit #20, il peut tout aussi bien s'agir d'un CRTC 0, 1 ou 2, puisque une lecture du bus en haute impédance donne éventuellement cette valeur. Coïncidence improbable mais à prendre en compte.

On est donc amené à mettre en place une nouvelle batterie de tests.

JE DÉTECTE LE PLUS

Un test simplissime, suggéré par RAM7, se base sur le bug de l'émulation PPI des CPC+. Cette dernière ne respecte pas les spécifications du constructeur, en laissant les ports intacts quand on touche au registre de commande.

La méthode consiste donc à modifier un port en sortie, puis accéder au registre de commande (même si c'est pour le placer dans le même état que précédemment), et enfin, relire le port (rappel : lire un port PPI en sortie revient à demander la dernière valeur envoyée). Un beau 0 - bon PPI = CPC normal.

En pratique, on se satisfera pleinement du quartet faible du port C (numéro de ligne clavier).
La vérification du phénonème sous BASIC s'accommode plutôt du bit DATA WRITE du lecteur K7, précieusement conservé par le système, ou du bit d'état du relais K7 si on se sent d'humeur facétieuse.

OUT &F666,&10:OUT &F777,&82:IF INP(&F666)=0 THEN PRINT"Bonjour !" ELSE PRINT"Beuh ?"

UN TYPE DÉTERMINÉ

Le tableau de la page précédente dresse une liste de caractéristiques suffisamment complète pour déduire à coup sûr le type du CRTC.

UNE CERTAINE CORRECTION

Je profite de la vie et par extension de cet article pour apporter quelques corrections par rapport à mes précédents propos sur le sujet duquel :

  • Le CRTC 2 ne permet pas de régler la durée de la VSync. Il y a une façon simple de s'en souvenir : le CRTC 2 ne sait rien faire de spécial !
  • Sur tous les CRTCs, R14 & RI 5 (adresse curseur), RI6 & RI7 (adresse crayon optique) peuvent être lus.
  • Je n'ai jamais poussé personne au meurtre.

Merci au centre de recherche de Montrouge et au centre de loisir de Coutances pour les confirmations.
Dans une lune, je vous proposerai un beau source commenté. Mais il serait intéressant d'essayer de coder votre propre test, non ?

Yves Détecte
DE QUOI ÇA CAUSE ?

Les CPCs ne disposent pas du même circuit vidéo. Les programmeurs de démos conciensçieux détectent le circuit question afin que leurs routines s'adaptent automatiquement en conséquence; La démo tournera alors parfaitement, quelque soit le
CPC.

AMSLIVE n°18

★ ANNÉE: ???
★ AUTEUR: MADRAM

Page précédente : AMSLIVE n°18 - BIDULES ET MACHINS VRAIMENT CHOUETTES

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » AMSLIVE n°19 - Crtc Detection - Retour Au Source
» Coding » AMSLIVE n°01 - Init
» Coding » AMSLIVE n°03 - CPC Plus - Ssn
» Coding » AMSLIVE n°14 - 3D est-ce l'amour ?
» Coding » Wacci CRTC (2/2)
» Coding » AMSLIVE n°10 - Memoire du CPC 2
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 477 millisecondes et consultée 2273 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.