Jump to content
Jagware
Sign in to follow this  
Fredifredo

Le UART bug ...

Recommended Posts

Fredifredo    0

Vous n'êtes pas sans savoir que les jeux [multi-joueurs multi-consoles] sur jaguar ne sont pas légions pour la simple et terrible raison qu'un vilain bug empêche les transmissions de correctement se dérouler.

 

Une seule personne a réussi à le découvrir et l'a utilisé pour son jeu : Thunderbird avec Battlesphere

 

 

 

Voici le dernier sujet en date sur jaguar sector II :

 

 

 

vous remarquerez qu'on essaye d'avoir des réponses mais même avec les meilleures intentions du monde rien ne filtre !

 

 

 

http://jaysmith2000.ipbhost.com/index.php?...c=3075&st=0

 

 

 

Pour ceux qui auraient des problèmes d'ego, et vu que ce bug traine depuis longtemps , sachez que les meilleurs coders jaguars de ces 10 dernières années ( Mathias, Bastian, etc... ) ont déjà passé pas mal de temps dessus et n'ont rien trouvé !

 

Thunderbird doit être le meilleur ? ;)

Share this post


Link to post
Share on other sites
GT Turbo    5
Fredifredo :


Thunderbird doit être le meilleur ? ;)





Fredifredo malgré tout le respect que je te dois reposte pas ce genre de phrase ou je fais un demande a RaZ d'effacer ce sujet !!



Je viens aussi de le lire et je m'apercois que thunderbird est et restera un clown, ne pas partager ce genre d'info, pitoyable.



Je te prends le pari que nous sommes capables de trouver ce bug, si c'est hard nous avons de toute façon SCPCD qui a de toute façon un meilleur niveau que l'oiseau.



Dans la doc de la Jaguar, il est fait allusion a un problème de transfert d'octet qui peut se dérouler dans certain cas, il explique comment le résoudre, mais je penses pas que ce soit cela ca serait trop simple.



Je ferais des essais dès que je pourrais cabler la RaZ's Jag et la mienne. On laissera pas le jeu en réseau a 'l'élite'... Car je comptes bien profiter de cette possibilité qui n'a pas été très exploité !!



GT Pour partager mes infos !! :yes:

Share this post


Link to post
Share on other sites
Fredifredo    0

 

 

 

Si j'ai posté ce sujet c'est bien que j'espère que toi et SCPCD vous pourrez lui montrer qui sont vraiment les meilleurs ! :)

 

 

 

Jagware team Powa !

Share this post


Link to post
Share on other sites
GT Turbo    5

Jagware team Powa !

 

 

 

J'en fait une affaire personnel et je t'assures qu'il va se manger quelque chose !!

 

 

 

On va le trouver ce bug, et après on fait un article complet dessus avec tous les sources et on le dédicacera a.....

 

 

 

 

 

GT Une tourelle de DCA !! ;)

 

 

 

P.S. : Pour info l'UART désigne la puce de transfert utilisé pour le link de consoles

Share this post


Link to post
Share on other sites
GT Turbo    5

La vrai question est est ce qu'il y a deux bugs dans l'UART ?

 

 

 

Si la réponse est non, voila le bug et la technique pour le corriger :

 

 

 

There is a bug in the Jaguar UART.If a start bit is detected at a certain phase in the UART's divide by 16 timer, it will be shifted in twice, resulting in a left shift of the data byte.

 

 

 

The problem may be avoided by preceeding a data packet with a dummy byte where the MSB is set (E.G.$80). The receiver code should discard this dummy byte. Subsequent bytes should be exactly aligned (i.e. 2,3 or 4 stop bits exactly, before the next start bit). This will result in causing the falling edge of the next start bit to miss the phase of the UART counter which causes the problem.

 

 

 

If a gap is left after a byte which is more than 2 bit times long, or is not exactly aligned with the previous byte, then the dummy byte must be retransmitted (To align the UART counter again).

 

 

 

 

 

 

Voili, voila donc est ce que qu'il y a deux bugs dedans ? Pour info le texte d'avant provient de la doc Atari dans la page bug....

 

 

 

GT En train de lire ;)

Share this post


Link to post
Share on other sites
Fredifredo    0

Bah y en a 2 alors ! pasque sinon Thunderbird se farait pas chier à vouloir garder secret une info qu'il ne l'est pas !

 

 

 

cf : la suite du sujet sur JSII !

Share this post


Link to post
Share on other sites
SCPCD    0

Deja, ce que l'on sait c qui est sur c'est que c'est la reception qui bug.

 

Car, il y a le programme de transfert de la clé de cryptage du CD qui est transmise par ce port.

 

Hors, je n'ai pas souvenir qu'ils ont parlé qu'ils avaient reussi a faire un code qui passe au dessus du bugg.

Share this post


Link to post
Share on other sites
Fredifredo    0

Tu veux dire que le code de la clef d'encryption contourne le bug mais avec des contraintes par exemple au niveau du timing ou de la redondance en renvoyant par exemple 2-3 fois les mêmes données pour être sûr du truc ?

Share this post


Link to post
Share on other sites
SCPCD    0

non, je pense qu'il y a un bug que dans la partie reception de la Jag.

 

et pas dans la partie emmission (ce qui est logique en fait : c'est plus facile d'envoyer des données series asynchrone que de les recevoirs :wacko:)

Share this post


Link to post
Share on other sites
Fredifredo    0

Ok je n'y étais pas ! Pour l'encryption c'est la jaguar qui balance les données dans le PC via le port série/jaglink !

 

 

 

Donc le truc c'est qu'il faudrait balancer des données dans la jaguar via un Jaglink 2 par exemple ( j'en ai 2 sous la main dans un carton ... :mellow: ) mais à partir de quoi ? d'une autre jaguar ou bien d'un ordi ?

 

et pouvoir afficher le résultat sur la Tv reliée à cette jaguar pour savoir si c'est buggué ou pas ...

 

 

 

Un début de piste ici :

 

 

 

http://www.mulle-kybernetik.com/jagdox/jerry.html#NETWORK*

 

 

 

le site de Derek Else concepteur du Jaglink 2 :

 

 

 

http://home.comcast.net/~delse/

Share this post


Link to post
Share on other sites
SCPCD    0

ben pour les tests, c'est vrai que en utilisant un PC ou un ATARI en faisant des progs d'envois de données serie, et d'afficher les resultats sur l'ecran de la Jag, ca permettrerais, je pense, de trouver un protocole qui marche.

Share this post


Link to post
Share on other sites
Fredifredo    0

Donc se reservir du même câble que pour l'encrytion des CD ?

 

 

 

C'est juste un cable DB9 avec 3 ou 4 fils et un prise RJ11 ( j'avais commencé à m'en faire à partir d'un RJ11 déjà connecté mais il est dans un carton ! )

 

 

 

C'est le genre de tache qui serait dans mes cordes quand tout mon matos sera en place d'effectué des tests de protocole ! :)

 

 

 

Si on se sert de 2 jaguars sinon, pourquoi ne pas utiliser un prog comme celui du joypad tester le code source est dispo ...

Share this post


Link to post
Share on other sites
GT Turbo    5
SCPCD :


ben pour les tests, c'est vrai que en utilisant un PC ou un ATARI en faisant des progs d'envois de données serie, et d'afficher les resultats sur l'ecran de la Jag, ca permettrerais, je pense, de trouver un protocole qui marche.





Je peux faire les essais, il va juste falloir qu'on regarde pour le cable de transfert.





GT ;)

Share this post


Link to post
Share on other sites
GT Turbo    5

Quelqu'un a un schéma ? Que je puisse planter la console de mes reves :yes:

 

 

 

GT En train de bugger :wacko:

Share this post


Link to post
Share on other sites
GT Turbo    5

Schéma récupéré, maintenant pour la partie soft, je balances des séquences au hasard avec le micro, chiffre et intervalle variable.

 

Mais coté Jag, je fais une bete boucle au 68000 en attendant la réception d'un octet et j'en fais la lecture oue je fais une routine d'inter ?

 

 

 

Faut que je regardes dans le code de Doom, je sais que celui la plante par moment, mais je sais pas si les routines reception-emission sont dans les sources, cela permettrait de savoir quel type de lecture appliqué.

 

 

 

GT En train d'emettre ! ;)

Share this post


Link to post
Share on other sites
Fredifredo    0

un petit peu de C from Doom spécialement pour GT :D :

 

=====================

 

=

 

= I_NetSetup

 

=

 

======================

 

*/

 

 

 

void DrawSinglePlaque (jagobj_t *pl);

 

 

 

int listen1, listen2;

 

 

 

void I_NetSetup (void)

 

{

 

jagobj_t *pl;

 

 

 

DoubleBufferSetup ();

 

UpdateBuffer ();

 

 

 

pl = W_CacheLumpName ("connect", PU_STATIC);

 

DrawSinglePlaque (pl);

 

 

 

Z_Free (pl);

 

 

 

ASICLK = UCLK_115200;

 

ASICTRL = (1<<6);

 

ASICLK = UCLK_115200;

 

ASICTRL = (1<<6);

 

 

 

/* ASICLK = 0xffff; // very slow */

 

 

 

GetSerialChar ();

 

GetSerialChar ();

 

wait (1);

 

GetSerialChar ();

 

GetSerialChar ();

 

 

 

/* wait a bit */

 

wait (4);

 

 

 

/* if a character is allready waiting, we are player 1 */

 

listen1 = GetSerialChar ();

 

listen2 = GetSerialChar ();

 

 

 

if (listen1 == -1 && listen2 == -1)

 

Player0Setup ();

 

else

 

Player1Setup ();

 

 

 

 

 

/* wait a while and flush out the receive que */

 

wait (5);

 

 

 

GetSerialChar ();

 

GetSerialChar ();

 

GetSerialChar ();

 

DoubleBufferSetup ();

 

UpdateBuffer ();

 

 

 

}

 

 

 

 

 

/*

 

======================

 

=

 

= I_NetTransfer

 

=

 

======================

 

*/

 

 

 

void G_PlayerReborn (int player);

 

 

 

unsigned I_NetTransfer (unsigned buttons)

 

{

 

int val;

 

byte inbytes[6];

 

byte outbytes[6];

 

byte consistancy;

 

int i;

 

 

 

/* don't transmit during heavy blitter action */

 

#if 0

 

do

 

{

 

junk = phasetime[8];

 

} while (!junk);

 

#endif

 

 

 

outbytes[0] = buttons>>24;

 

outbytes[1] = buttons>>16;

 

outbytes[2] = buttons>>8;

 

outbytes[3] = buttons;

 

 

 

consistancy = players[0].mo->x ^ players[0].mo->y ^ players[1].mo->x ^ players[1].mo->y;

 

consistancy = (consistancy>>8) ^ consistancy ^ (consistancy>>16);

 

 

 

outbytes[4] = consistancy;

 

outbytes[5] = vblsinframe;

 

 

 

if (consoleplayer)

 

{

 

/* player 1 waits before sending */

 

for (i=0 ; i<=5 ; i++)

 

{

 

val = WaitGetSerialChar ();

 

if (val == -1)

 

goto reconnect;

 

 

 

inbytes = val;

 

PutSerialChar (outbytes);

 

}

 

vblsinframe = inbytes[5]; /* take gamevbls from other player */

 

}

 

else

 

{

 

/* player 0 sends first */

 

for (i=0 ; i<=5 ; i++)

 

{

 

PutSerialChar (outbytes);

 

val = WaitGetSerialChar ();

 

if (val == -1)

 

goto reconnect;

 

inbytes = val;

 

}

 

}

 

 

 

/* */

 

/* check for consistancy error */

 

/* */

 

if (inbytes[4] != outbytes[4])

 

{

 

jagobj_t *pl;

 

 

 

S_Clear ();

 

pl = W_CacheLumpName ("neterror", PU_STATIC);

 

DrawPlaque (pl);

 

Z_Free (pl);

 

 

 

wait (200);

 

goto reconnect;

 

}

 

 

 

val = (inbytes[0]<<24) + (inbytes[1]<<16) + (inbytes[2]<<8) + inbytes[3];

 

 

 

return val;

 

 

 

/* */

 

/* reconnect */

 

/* */

 

reconnect:

 

S_Clear ();

 

 

 

if (consoleplayer)

 

wait (15); /* let player 0 wait again */

 

 

 

I_NetSetup ();

 

if (starttype == gt_single)

 

Jag68k_main ();

 

 

 

G_PlayerReborn (0);

 

G_PlayerReborn (1);

 

 

 

gameaction = ga_warped;

 

ticbuttons[0] = ticbuttons[1] = oldticbuttons[0] = oldticbuttons[1] = 0;

 

return 0;

 

}

Share this post


Link to post
Share on other sites
Fredifredo    0

J'ai chopé au détour d'une recherche sur mon DD le code source du Jaguar Modem et il y a 3 codes en assembleur 68k/GPU ? qui se nomment UARTrx , UARTtx et UART , peut-être pourraient-ils servir de départ à un prog de test ?

Share this post


Link to post
Share on other sites
GT Turbo    5

Pourquoi cherche un bug qui est connu par quelqu'un d'autre ?

 

 

 

En farfouillant ici :

 

 

 

http://www.mo5.com/obsolete/67-dossier-anecdotes-atari.html

 

 

 

et si on descend plus bas on trouve ceci :

 

 

 

Oui et le son était fait au DSP et le pauvre devait aussi gérer le fameux réseau qui d'ailleurs était buggué au niveau de la FIFO HARD de la puce obligeant à capturer chaque octet sous peine de le perdre !

 

 

 

Rodolphe Czuba et Thierry Schembri connaissaient déjà le bug !!!

 

 

 

GT Mort de rire !! ;)

Share this post


Link to post
Share on other sites
SCPCD    0

Vraiment interressant ce dossier :)

 

 

 

Ils connaissaient le bug et apparement ils ont trouvé comment le contourner !!!!

 

Et j'ai compris comment ils ont fait ;)

Share this post


Link to post
Share on other sites
cts    0

Bah, c'est le bug connu non ?

 

 

 

Et puis Fifo, faut le dire vite hein ! C'est juste un octet d'avance !

 

 

 

Donc, toujours l'histoire du $80 à tester pour voir si décalage en début de trame...

Share this post


Link to post
Share on other sites
Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×