Jump to content

Le UART bug ...


Fredifredo

Recommended Posts

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 ? ;)

Link to comment
Share on other sites

  • Replies 50
  • Created
  • Last Reply

Top Posters In This Topic

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:
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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:)

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 ...

Link to comment
Share on other sites

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 ;)
Link to comment
Share on other sites

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 ! ;)

Link to comment
Share on other sites

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;

 

}

Link to comment
Share on other sites

  • 1 month later...
  • 3 weeks later...

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 !! ;)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...