Inscription : 13 Jan 2010, 14:25 Message(s) : 2270
Sans soudure, oui je pense que ça fait l'affaire. Après, j'ai testé cela avec la PlayCity qui est sur le port d'extension... Alors j'espère ne pas dire de bêtise, car sur le port RJ12 il faut peut-être dissocier COM de GND, car c'est une version "spéciale" du port manette.
Inscription : 13 Jan 2010, 14:25 Message(s) : 2270
LPEN marche comme le signal CURSOR, tous deux connectés au CRTC. C'est la combinaison de la pression du bouton/détente et la réception de la lumière du balayage du canon à électron qui va indiquer à quel endroit tu te trouve à l'écran à un instant t.
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
norecess464 a écrit :
Merci Richard! Ça reste de la sorcellerie pour moi
Le principe est simple concernant le pistolet magnum d'Amstrad ou un crayon optique : 1) tu appuies sur le bouton 2) le capteur est alimenté et pointe sur l'écran 3) lorsque le capteur détecte la lumière du faisceau à électron qui rafraichit l'image à l'écran (ce qui explique que cela ne fonctionne pas sur un écran LED au passage ) 4) tu as un signal qui est envoyé du pistolet vers le CRTC (LPSTB pin). 5) Le CRTC mets dans (LPEN registres R16 (H) et R17 (L)) la valeur de MA (Memory Address) dans ces registres... 6) Reste plus au z80 de lire les infos du CRTC et cela te donne un la position au caractère CRTC prêt (2 octets) ...ce qui correspond à la MA (Memory Address du CRTC) 7) et le CRTC en profite pour remettre le signal LPEN en interne à false ce qui permet de régénérer une autre adresse LPEN si besoin !
A toi de détecter au niveau de ton programme qu'elle zone d'écran a été "touché" : (R16<<8+R17)<<2 te donne l'adresse écran...
Oui la partie "lecture de la position" via le CRTC je pouvais voir comment l'envisager ;
Mais c'est la partie électronique dans laquelle je nage, cf. comment le capteur sait a quelle ligne il est par rapport a l’écran lors du rafraîchissement, comment ça fait pour fonctionner avec des écrans de dimension variées, etc.
Je n'ai eu aucune formation a l’électronique (a part l'introduction qu'on nous donne en classe de 6eme, bref je sais changer une pile dans une radio
Note que je ne demande pas plus d'info que ça -- le sujet m’intéresse vaguement en fin de compte
Inscription : 13 Jan 2010, 14:25 Message(s) : 2270
La luminosité captée par un crayon optique est plus large que celle d'un pixel, mais le CRTC sait ou il en est dans l'affichage d'une scanline. De ce fait, la précision de ce périphérique est meilleure à l'horizontal qu'à la verticale.
Concernant un pistolet, j'imagine que l'on s'en fou un peut de viser l'écran tant que l'on reçoit un flash au moment ou l'on a pressé la détente et que l'adresse CRTC correspond à la position ou est présent un sprite.
Si j'ai compris les explications de Megachur, le capteur seul ne permet pas de déterminer une position, c'est juste un déclencheur pour dire au CRTC de stocker les cooordonnées où se trouvent le signal vidéo (correspondant au faisceau à électron dont la luminosité est détectée par le capteur !).
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
@norecess : tant pis même si tu n'en demandais pas plus, j'écris quand même ce que j'en ai compris pour la postérité amstradienne !!! A noter que le Gunstick (Ubi Soft / Opera Soft) et le WestPhaser de Loriciels ne fonctionnent pas pareil :
Ceux-ci captent juste la luminosité à l'écran qui est affiché sans utiliser la fonctionnalité LPEN du CRTC et ce qui explique qu'ils marchent avec le DB9 / prise joystick...
en gros, on affiche un sprite à dégommer, puis une tempo, on affiche un carré blanc à la place, une tempo et on réaffiche (sprite touché ou le sprite avant)...
si le capteur détecte suffisamment de luminosité sur l'endroit pointé, alors il envoie joystick haut ou bas selon les modèles et c'est au z80 de lire cela comme une touche clavier... par contre, souvent il y a un décalage et il faut donc déterminer le Y où on est et surtout le X décalé pour savoir quel sprite est touché...
en gros en coding : frame 1 : j'affiche les sprites frame 2 : j'affiche noir sous les sprites frame 2 : j'affiche blanc sous le sprite 1 et je teste si bas ou haut pressé : si oui on a tiré sur le sprite 1 frame 2+x frames : j'affiche noir sous le sprite 1 et blanc sous le sprite 2 et je teste si bas ou haut pressé : : si oui on a tiré sur le sprite 2 etc... frame xx : j'affiche à nouveau les sprites non touchés, etc.
A noter que ni pour l'un, ni pour l'autre, je n'ai vu de doc technique / coding asm ; il serait peut-être intéressant d'en faire une... on désassemblant des routines de jeux afin d'en trouver l'optimale pour que des codeurs puissent supporter ces périphériques dans le futur !!!
Pour ma part, je n'ai jamais eu de tel périphérique et c'est dommage, j'aurai pu faire plus de tests...
Merci pour les explications, là pour le coup, je ne savais pas que ces périphériques fonctionnaient de la sorte.
J'imagine que pour le phaser Loriciels, l'idée était d'avoir un pistolet compatible avec autre chose qu'un CPC (c'est sorti sur ST, Amiga et PC je crois, et évidemment, ces pauvres machines (sauf les PC CGA) n'ont pas dans leurs entrailles un puissant CRTC ).
Ca doit méchamment limiter les possibilités de détection, ça. A un instant T, tu ne peux avoir qu'un sprite "blanc", non ? Le pistolet devrait fonctionner sur un moniteur non cathodique par contre ?
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum