240

Donc juste pour être sûr, si j'ai 0x5d au lieu de 0x1d dans serctl, ca veut bien dire qu'à chaque fois que des données sont recues, la methode qu'on a "bindé" avec l'irq va être appelée et les donnés peuvent alors être lues sur serdat?

Comment ca fonctionne en interne? Y a une sorte de buffer, quelque chose comme ca ? Si j'envoies 10 bytes d'affilé, ca se présente comment à la réception ?

(désolé pour les accents je suis sur un clavier suédois c'est galère ^^)

Aussi, une petite questions subsidiaire... j'ai trouvé ca sur IRQ4:
IRQ 4: UART RX or TX related Doesn’t fire at timer expiration, but rather at the moment when data has arrived in receive buffer or when transmit buffer is empty.

donc quand on "installe" la function SER sur l'IRQ 4, je n'arrive pas bien à saisir... elle va être déclenché quand on lit certes mais aussi quand on écrit ?

241

SERCTL est le registre qui permet de contrôler les paramètres du port Série
Sur IODAT, tu as une info pour détecter un câble branché
La vitesse se règle dans les paramètres du TIMER n°4
Le bug sur le déclenchement de l'interruption (selon son niveau au lieu du front) fait qu'elle se déclenche en continu et qu'il faut d'abord désactiver l'interruption quand elle survient ensuite rabaisser le niveau et après la réactiver sinon elle se déclenche en boucle.

RXINTEN écrit à 1 correspond bien à l'activation du mode interruption (et donc il faut "binder")

L'interruption en réception se déclenche aussi à l'envoi, c'est un "bug" connu.

Les bits sont transmis par un registre à décalage. Pour envoyer N octets de suite tu dois prévoir que l'octet x+1 ne doit pas être transmis (dans SERDAT) tant que TXRDY n'est pas up. (le fameux masque 0x80 sur SERCTL)

L'irq 4 a un fonctionnement particulier quand elle est déclenchée par l'UART, au lieu d'être "clock defined", elle devient "bit defined" vu que c'est la fin du chargement du registre à décalage qui déclenche l'interruption. Au final au lieu d'avoir un déclenchement toutes les 1/fréquence_timer, c'est 1/fréquence_timer+cycles de travail du registre à décalage
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

242

Merci pour les infos, je m'en vais vais jouer avec tout dès possible smile

Sinon en testant IODAT, je dois donc pouvoir verifier qu'un cable est branché sur le port comlynx...?
quels bit?
b2, NoExp (input)?
b4, Audin (input)?

243

NoExp cela dit, je ne sais pas comment est détecté le truc, si c'est ce que je crois un cure dent dans la prise lui ferait détecter un câble...
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

244

De toute façon, ça n'est pas vraiment nécessaire pour détecter une déconnexion.

Si les consoles communiquent régulièrement entre elles, il suffit de détecter qu'il n'y a pas eu de données reçues pendant plus d'un certain délai (avec un timer, ou juste en comptant les VBL) pour savoir que le câble est débranché, ou que l'autre joueur a ragequit en éteignant sa Lynx, etc.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

245

oui je pensais faire quelque chose comme ca pendant le jeu, mais je me demandais si tester IODAT ne pouvait pas être utile pour essayer de demarrer une session reseau.
Genre sur l'écran de selection des joueurs, si on detecte que le comlynx est connecté alors on boucle tant qu on recoit pas de données.

246

Ça n'apporte pas grand-chose : tu peux faire tourner la réception et l'émission tout le temps, vu que s'il n'y a pas de câble branché, ça ne fera simplement rien.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

247

Zerosquare (./244) :
ou que l'autre joueur a ragequit en éteignant sa Lynx, etc.
même pas sûr, je pense que c'est juste la présence physique d'une prise sur le connecteur qui est détectée...
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

248

C'est justement ce que je dis : si tu détectes l'absence de réception de données plutôt que le fait qu'il y a un câble est branché, ça gère tous les cas (dont celui-là).
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

249

ok o k donc je commence à y voir un peu plus clair, il semblerait qu'en balancant trop de donnée sur le comlynx, on le sature et qu on perde quasiment tous les messages. La je teste envoyant un octet par second et l'autre machine semble tout recevoir... Bon après c'est avec le handy trafiqué donc à voir sur une vraie lynx... (va falloir que je trouve un comlynx du coup ^^).

petite question subsidiaire, quand vous envoyez des données, il vous fait un identifiant pour savoir qui envoies les données... commet faites vous pour obtenir un UID ou tout au moins qq chose qui s'en rapproche?

250

On tombe dans le réseau, tu as plein d'astuces, soit tu dis que c'est par ordre d'arrivée et on tourne soit tu dis que le premier est master et c'est lui qui donne la parole les uns après les autres, soit chacun attend rnd() ms et parle si le canal est libre... c'est souvent lié à ton besoin et au type de communication que tu veux
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

251

Bon ça avance et ça communique bien et vite maintenant, mais de temps en temps j'ai des messages contenant des données incorrectes (peut-être 1% des messages).
Je me posais donc la question si tu/vous faisais/-iez un checksum des données recues lors de vos expériences ?

Quand on créé un protocole, ça me semble le truc de base à faire, mais comme on parle ici d'un cable de 1m y a ptet pas de perte ?
(bon sauf que moi j'en ai en testant sur mon Handy trafiqué ^^).

252

- Quand tu dis "données incorectes", c'est quoi ? Octets manquants, dupliqués, en trop, ou corrompus ?
- Est-ce que un ou plusieurs bits d'erreur (parity, framing, overrun) sont déclenchés ?
- Tu testes entre quoi et quoi ? Handy d'un côté et une vraie console de l'autre, ou Handy des deux côtés ?
- Quelle vitesse de transmission utilises-tu ?

Sur un câble d'un mètre, le taux d'erreur est très faible, nettement moins de 1%. Et si tu testes entre deux émulateurs, il est normalement nul. Si tu as des erreurs inexpliquées, c'est un bug dans ton code et/ou dans l'émulateur/l'adaptateur matériel (suivant le cas).

Rajouter un checksum est une bonne idée dans l'absolu (surtout quand il y a beaucoup de longueur de câble), mais dans ton cas va simplement masquer un problème qui ne devrait pas exister. À ta place je chercherais la cause d'abord.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

253

Entre ta réponse et celle de nop90 sur AA (qui n'a jamais eu de perte quand il testait son jeu) ca confirme que je dois faire une petite erreur quelque part (et c'est embêtant quand 99% des messages partent et arrivent bien).

Je teste avec 2 handy de chaque côté mais le problème ne vient pas de la.
J'ai testé en 9600 baud et 65200, le problème est le même.

Au niveau des bits d'erreurs j'avoues ne pas avoir regardé...

En revanche ce matin j'ai testé rapidement d'envoyer des données prédéfinies.
Par exemple le client 1 envoie successivement a, b, c ,d, checksum 1 (soit 5 octects) tandis que le client 2 envoie e, f, g, h, checksum 2.
Dans les 2 cas le message est terminé par l'envoie d'un octet "ACK" (255).

Quand je detecte une erreur de checksum, je logge ce que j'ai recu et là, surprise...
le client 1 a recu a, f, g, h et le client 2 a recu e, b, c, d...

Donc ca ressemble furieusement au premier octet envoyé par le client qui serait non "consumé" et donc recu par ce meme client...
Pourtant mon code est exactement le même que sur le forum ou, une fois l'octet envoyé je le consume...

Une idée ? smile

254

Bizarre bizarre. Peut-être un bug dans Handy qui ne se produit que dans des circonstances bien particulières ?

Tu peux tenter de reprendre le code de Nop90 tel quel (vu que d'après lui, ça marche), et modifier petit à petit pour voir à quel moment l'erreur apparaît.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

255

Si c'est une uart, le cable est espionnable avec un adaptateur série usb standard genre ftdi.

Un coup de capture + observation devrait confirmer si les bons bits passent sur le fil, ca permettrait de mieux comprendre ou ca foire.

Si le cable est mal fichu, genre trop capacitif, ou mal blindé, ou mal soudé, les fronts du signal peuvent être abimés et mal lus par le coté récepteur. En général une uart simple va regarder l'état du signal au milieu du bit mais pas toujours.

256

D'après ce qu'il dit, ça le fait aussi avec une liaison série virtuelle entre deux émulateurs, donc c'est pas électrique.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

257

Je vais continuer à tester ce soir, ca me saoule un peu de bloquer sur un truc qui semble relativement simple, mais de l autre c'est intéressant de se prendre la tête sur un truc bas niveau, ce que j ai pas du faire depuis 15 ans au moins ^^

258

squalyl (./255) :
Si c'est une uart, le cable est espionnable avec un adaptateur série usb standard genre ftdi.

Un coup de capture + observation devrait confirmer si les bons bits passent sur le fil, ca permettrait de mieux comprendre ou ca foire.

Si le cable est mal fichu, genre trop capacitif, ou mal blindé, ou mal soudé, les fronts du signal peuvent être abimés et mal lus par le coté récepteur. En général une uart simple va regarder l'état du signal au milieu du bit mais pas toujours.
Les fréquences utilisées ne sont pas dispo sur les ftdi classiques (à part le 9200)
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

259

lordkraken (./253) :
J'ai testé en 9600 baud et 65200, le problème est le même.
Une idée ? smile

vince (./258) :
Les fréquences utilisées ne sont pas dispo sur les ftdi classiques (à part le 9200)

9600 c'est standard donc supporté par les FTDI smile
avatar"If you see strict DRM and copy protection that threatens the preservation of history, fight it: copy the work, keep it safe, and eventually share it so it never disappears. [...] no one living 500 years from now will judge your infringing deeds harshly when they can load up an ancient program and see it for themselves."

Benj Edwards - Why History Needs Software Piracy

- - -
Achat ou échange: topic de mes recherches / Meilleur smiley = #helico#

260

ftdi supporte pas mal de trucs non standard justement.

261

Vince > normalement si (même 62500 bps), faut juste un soft de terminal qui te laisse taper la vitesse plutôt que de choisir dans une liste.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo