Forum tama's team
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Forum tama's team

cp: ne peut évaluer `brain': Aucun fichier ou dossier de ce type
 
AccueilPortailGalerieRechercherDernières imagesS'enregistrerConnexion
Connexion
Nom d'utilisateur:
Mot de passe:
Connexion automatique: 
:: Récupérer mon mot de passe
Derniers sujets
» Numbers
[C] Link Icon_minitimepar Ver2guerre Dim 02 Avr 2023, 00:47

» Mort ?
[C] Link Icon_minitimepar godbod Dim 22 Aoû 2021, 12:23

» Network, essai 1
[C] Link Icon_minitimepar godbod Dim 09 Juil 2017, 02:18

» GODBOD
[C] Link Icon_minitimepar godbod Sam 08 Juil 2017, 14:05

» mon humeur
[C] Link Icon_minitimepar Ver2guerre Sam 30 Juil 2016, 19:44

» [A voir] Programme de traduction original : WikiTranslate
[C] Link Icon_minitimepar AdRiWeB Lun 01 Fév 2016, 04:50

» Reprise ?
[C] Link Icon_minitimepar Emyl Jeu 14 Juin 2012, 21:17

» Euh, ah ?
[C] Link Icon_minitimepar Ver2guerre Dim 27 Mai 2012, 12:11

» Problème TI 89 Titanium non visible après mise à jour
[C] Link Icon_minitimepar abdoukid Mer 23 Mai 2012, 13:37

» Y'a quelqu'un ?
[C] Link Icon_minitimepar Ver2guerre Sam 21 Avr 2012, 23:10

Quick message
Qui est en ligne ?
Il y a en tout 5 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 5 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 367 le Dim 18 Oct 2009, 00:16
Le Deal du moment :
Cartes Pokémon 151 : où trouver le ...
Voir le deal

Partagez | 
 

 [C] Link

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
tama
Admin
Admin
tama

Nombre de messages : 12376
Age : 32
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 9449
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

[C] Link Vide
MessageSujet: [C] Link   [C] Link Icon_minitimeDim 19 Oct 2008, 16:41

Non, il ne s'agit pas du personnage portant le même nom dans Zelda ^_^, il s'agit d'autre chose qui est également très intéressant : la liaison entre 2 TI68k en C :)

Comment faire lorsqu'on veut un jeu qui se joue à plusieurs mais que le clavier étant trop limité (c'est pas un clavier d'ordi, et encore ... :p) on ne peut pas jouer sur la même TI ?
réponse : en utilisant 2 TI !
Félicitations, vous venez de comprendre le concept du link, maintenant il faut savoir comment faire, et c'est l'objet de ce tuto :p
Allons-y donc ...




Le link sur TI68k

Euh......comment qu'on fait ça ?

Un peu de patience, jeune padawan (la phrase qu'on place dans chaque tuto, il fallait bien que je la sorte triso), on va d'abord présenter les instructions nécessaires pour qu'on puisse "travailler"

Il faut d'abord savoir qu'il existe 2 "types" d'instructions pour le link : celles de haut niveau et celles de bas niveau. La différence ? le haut niveau est plus facile à comprendre pour nous mais en contrepartie il est parfois plus lent (même si c'est de l'ordre de quelques millisecondes) et plus lourd (en taille je parle bien sûr ^^). A l'inverse, le bas niveau est plus difficile à comprendre pour nous, et plus facile pour la TI, mais il est plus rapide et plus léger en général.
Dans ce tuto, je vais uniquement utiliser les instructions de haut niveau, mais si vous voulez améliorer tout ça, vous pourrez utiliser les fonctions de bas niveau Wink

Les fonctions que nous allons utiliser sont donc ......... *roulements de tambour*


  • LIO_SendData();
  • LIO_RecvData();

Un peu plus d'informations quand même ? ^_^

LIO_SendData() sert à ..... envoyer quelque chose ! comment ça je vous apprend rien de nouveau ?! hum
Bon en revanche, je suis sûr que vous ne savez pas que cette fonction prend 2 arguments =P
- Le premier est un pointeur de type void vers la variable à envoyer ( Attention variable créée dans le programme, pas une variable du Var-Link, on verra ça plus tard)
- Le second correspond à la taille de la variable à envoyer (reportez-vous à la doc pour savoir la taille de la variable selon son type, ou sinon utilisez sizeof(...)), il est de type unsigned short


LIO_RecvData()
est assez similaire au niveau des arguments, mais bien sûr, elle sert à recevoir quelque chose envoyé par l'autre TI :)
Elle prend 3 arguments :
- Le premier est un pointeur de type void vers l'endroit où la variable reçue sera stockée

Citation :

oO

Rien de compliqué pourtant, pour faire plus clair, supposons un exemple : la TI émettrice (nommons-la A) envoie une variable de type short nommée ma_var à une TI réceptrice B
Mais comment est-ce que B va savoir que la variable envoyée s'appelle ma_var, d'autant que je rappelle que lors de la compilation, les noms de variables n'ont plus aucune signification ? Elle va alors recevoir le contenu de la variable ma_var de A, puis le stocker dans une variable créée avant :


TI émettrice
...
short ma_var = 42;
LIO_SendData(&ma_var, sizeof(short)); //envoie le contenu de ma_var
...



TI réceptrice

...
short ma_var_venant_de_la_TI_emettrice;

short s = LIO_RecvData(&ma_var_venant_de_la_TI_emettrice, sizeof(short), 200); //reçoit le contenu de ma_var

...
//si tout s'est bien passé, ma_var_venant_de_la_TI_emettrice contient la valeur 42


C'est aussi simple que ça geek
Vous remarquerez que j'ai anticipé (c'est ça un bon rédacteur de tuto Laughing ) sur les autres arguments que doit recevoir l'instruction LIO_RecvData :
- le 2ème argument est la taille de la variable à recevoir, il est de type unsigned short
- enfin, le 3ème argument est le temps à attendre

Citation :

Neutral 200 secondes ?! mais j'ai le temps de faire plein de trucs en 200 secondes ! Sleep

Ah oui ? Razz
Enfin, non, ce n'est pas des secondes, "l'unité" de mesure est plutôt un tick

Citation :

Un tique ? beuuurrrk couic

non, pas un tique, un tick. Un tick correspond à 1/20ème de seconde, ou 0.05 seconde si vous préférez.
Ici je vous laisse faire le calcul, 200 ticks correspondent à 200/20ème de seconde, soit 10 secondes.
Dans l'exemple, la TI réceptrice va donc attendre ce qu'elle doit recevoir pendant 10 secondes, avant d'aller dire à l'autre d'aller se faire voir parce que c'est trop long lolpaf


Que se passe t-il alors si la TI réceptrice ne reçoit rien ? c'est vrai, j'ai mis un short s = ... devant l'instruction, cela veut bien dire qu'elle retourne quelque chose ?
En effet, elle retourne 0 si elle a bien reçu quelque chose (et elle est contente love ), ou une autre valeur non nulle (et elle est pas contente grrrrrr ) sinon. Attention, c'est pas l'inverse, ce n'est pas un boolean (enfin, c'est facile à adapter avec un simple opérateur ternaire : s = (s==0)?1:0; mais ça n'a pas vraiment d'intérêt)

Voilà, vous avez maintenant les outils pour travailler (je ne dirais pas tous, il reste plein d'autres instructions à découvrir), nous allons donc pouvoir mettre tout ça en application :)








Finie la théorie, place à la pratique !

Le "but du jeu" de ce paragraphe est simple, il s'agit d'un programme tout "con" : A déplace un pixel sur son écran, et ce pixel s'affiche en temps réel sur l'écran de B à la position où il se trouve sur l'écran de A ^^
Rien de compliqué non ? Eh bien allons-y alors cool

Première chose à laquelle on doit réfléchir avant de commencer tout programme : quelle sera la structure du programme ?
Ici on a 2 possibilités :

  • soit on fait un programme différent sur chaque TI, l'un étant pour recevoir, l'autre pour envoyer
  • soit on fait un programme commun qui réagira différemment selon que la TI est la TI réceptrice ou la TI émettrice
Pour cette partie, on utilisera la 1ère possibilité, parce que c'est la plus rapide à faire. Vous pourrez ensuite adapter le programme et utiliser la 2ème possibilité, référez-vous alors à la 3ème partie, la partie BONUS
Nous disions donc que nous allions faire 2 programmes différents

Commençons donc par le programme émetteur :

01 : #include < tigcclib.h >
02 :
03 : #define STOP -1
04 : #define C89_92(a,b) (TI89?a:b)
05 :
06 : void _main(void)
07 : {
08 : .....short pos[] = {C89_92(80,120), C89_92(50,64)};
09 : .....short link = 1;
10 : .....ST_helpMsg("En attente de l'autre TI.....");
11 :
12 : .....while(link = LIO_SendData(&link, sizeof(short), 1)) ............... continue;
13 :











Un p'tit bonus pour terminer

Pour terminer ce tuto, voici un bonus : une fonction qui établit un lien entre 2 TI, de façon particulière : elle permet de dire qui sera celui qui hébergera la partie et qui sera celui qui la rejoindra. Cette fonction est modifiable, ici celui qui appuiera le premier sur [Enter] hébergera la partie, le deuxième sera celui qui la rejoindra; cela peut être utile pour certains jeux, où seul celui qui hébergera la partie pourra modifier les options du jeu par exemple ... Wink



Avant de créer cette fonction, donnons quelques précisions sur le fonctionnement de cette fonction :
Le principe est simple : le premier à exécuter une certaine action (appuyer sur [Enter] par exemple) va se mettre en mode attente jusqu'à ce que l'autre TI envoie une certaine information qui confirmera qu'il y a une liaison fonctionnelle et qu'on peut continuer.

Voici donc le code que je propose, essayez d'en comprendre au moins les grandes lignes avant de passer à la suite (pour rendre cette compréhension plus facile, "mettez-vous à la place des TI" dans chacun des cas)


01 : void establish_link()
02 : {
03 : .....#define getKey() (kbhit()?ngetchx():0);
04 :
.....#define WAITING 0;
05 :
.....#define READY 1;
06 :
07 : .....DrawStr(30,10,"Appuyer sur [ENTER] pour commencer",A_NORMAL);
08 : .....short statut = WAITING;
09 :
.....BOOL received = FALSE;
10 : .....short key = 0, sent = 1;
11 :
12 : .....while (key != KEY_ENTER)
13 :
.....{
14 :
..........LIO_RecvData(&received, sizeof(short), 1);
14 :
..........key = getKey();
15 : .....}
16 :
17 :
.....statut = READY;
18 :
19 :
.....if (received == FALSE)
20 :
.....{
21 :
..........while(sent
22 : sent = LIO_SendData(&
)

}




to be completed...


Dernière édition par tama le Lun 27 Oct 2008, 14:06, édité 2 fois
Revenir en haut Aller en bas
Ver2guerre
chasseur en chef
chasseur en chef
Ver2guerre

Nombre de messages : 3145
Age : 113
Localisation : Partout en même temps (V2g quantique)
Loisirs : #pkill boulet
Humeur : Happy :)
items : [C] Link V2gqe7
Personalized field : 12 jetons
Réputation : 8
Points : 7538
Date d'inscription : 15/09/2007

Profil
TI: (TI-89Tita)^2+TI83Plus
TO: 50 [2380 - 2%] {54}
Spécialité: Autres

[C] Link Vide
MessageSujet: Re: [C] Link   [C] Link Icon_minitimeSam 25 Oct 2008, 16:24

Un tuto du plus haut intérêt ! Je suis fan.
Revenir en haut Aller en bas
tama
Admin
Admin
tama

Nombre de messages : 12376
Age : 32
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 9449
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

[C] Link Vide
MessageSujet: Re: [C] Link   [C] Link Icon_minitimeSam 25 Oct 2008, 20:26

rajouté quelques petits trucs, la fin ce soir :)
Revenir en haut Aller en bas
Contenu sponsorisé




[C] Link Vide
MessageSujet: Re: [C] Link   [C] Link Icon_minitime

Revenir en haut Aller en bas
 

[C] Link

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum tama's team :: TI :: TI 68k :: Tutoriels-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit