π
<-

Faire tourner deux boucles en simultané

Faire tourner deux boucles en simultané

Message non lude Reuberts » 12 Jan 2011, 20:23

Bonsoir tout le monde =)

Je voulais simplement savoir s'il était éventuellement possible de faire tourner deux boucles en meme temps de manière "indépendante".

Par exemple, admettons dans un jeu, on doit déplacer un objet et simultanément au déplacement, il y a des objets qui se bougent (cas d'un space invader, ou l'on doit déplacer un vaisseau pour tirer sur des cibles qui "tombent").

Voila, si ca se trouve la réponse est bien bete mais la je sèche
:%):

Merci en tout cas :#top#:
Initié au TiBasic :#gni#:
... Et aime ca!! :#langue#: :#langue#:
Avatar de l’utilisateur
Reuberts
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 96%
 
Messages: 29
Inscription: 19 Déc 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1S

Re: Faire tourner deux boucles en simultané

Message non lude critor » 12 Jan 2011, 20:44

Ce que tu décris me semble relever du multi-tâche.

Or, le système TI-83+ est mono-tâche.
Ce n'est pas possible.


Toutefois, il n'y a pas besoin de multi-tâche dans l'exemple que tu cites.
Il suffit de mettre toute la gestion dans la même boucle.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 54.5%
 
Messages: 42500
Images: 17346
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Faire tourner deux boucles en simultané

Message non lude Kiligolo » 12 Jan 2011, 20:50

Il suffit d'utiliser Repeat ou While et de mettre en condition celle qui met fin au jeu puis placer plusieurs variable comme l'ordonnée des "objets qui tombent", l'abscisse et l'ordonnée du vaisseau et tout le reste. :#top#:
Avatar de l’utilisateur
Kiligolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 84.3%
 
Messages: 1465
Inscription: 17 Mai 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1reS

Re: Faire tourner deux boucles en simultané

Message non lude mdr1 » 28 Mar 2011, 15:32

critor2000 a écrit:Ce que tu décris me semble relever du multi-tâche.

Or, le système TI-83+ est mono-tâche.
Ce n'est pas possible.


Toutefois, il n'y a pas besoin de multi-tâche dans l'exemple que tu cites.
Il suffit de mettre toute la gestion dans la même boucle.

On peut simuler le multi-tâche, même sans multi-cœurs à l'aide des interruptions.
Mais dans ce cas, c'est plus simple de fabriquer une routine asm qui gère ce multi-tâche. (cela s'appelle des threads)
Image ImageImage
Avatar de l’utilisateur
mdr1Premium
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 44%
 
Messages: 1083
Images: 12
Inscription: 28 Mar 2011, 00:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Je voyage toujours en première.

Re: Faire tourner deux boucles en simultané

Message non lude Bisam » 28 Mar 2011, 16:28

Ce que tu décris est bien compliqué, mdr1, pour quelqu'un qui semble débuter.

L'idée que suggérait Critor est de faire une boucle rapide dans laquelle, au bout d'un certain nombre de passages, tu fais quelque chose (bouger des objets par exemple).
Si tu as besoin de connaître l'état du clavier, tu peux dans cette boucle en faire une autre dont le nombre de passages dépend du nombre de passage dans la boucle extérieure afin que l'exécution de tes "interruptions" se fassent quand même à intervalles réguliers.
Cela demande un peu de tests pour les divers paramètres de temporisation mais ça fonctionne assez bien pour des exemples simples.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Faire tourner deux boucles en simultané

Message non lude tama » 28 Mar 2011, 21:30

et puis, ça existe vraiment des threads en assembleur z80 ? j'en ai pas entendu parler jusqu'à maintenant ...
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`

Pas de support par MP, merci.
Avatar de l’utilisateur
tama
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 40.9%
 
Messages: 10995
Inscription: 19 Déc 2005, 00:00
Localisation: /dev/null mais je survis :)
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Faire tourner deux boucles en simultané

Message non lude Lionel Debroux » 29 Mar 2011, 06:44

Le multitâche préemptif doit pouvoir se faire sur Z80 :):
Sauvegarder les registres du thread actuel, charger ceux du nouveau thread après avoir mis à  jour diverses variables internes.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.4%
 
Messages: 6875
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Faire tourner deux boucles en simultané

Message non lude mdr1 » 29 Mar 2011, 08:07

Bisam a écrit:Ce que tu décris est bien compliqué, mdr1, pour quelqu'un qui semble débuter.

L'idée que suggérait Critor est de faire une boucle rapide dans laquelle, au bout d'un certain nombre de passages, tu fais quelque chose (bouger des objets par exemple).
Si tu as besoin de connaître l'état du clavier, tu peux dans cette boucle en faire une autre dont le nombre de passages dépend du nombre de passage dans la boucle extérieure afin que l'exécution de tes "interruptions" se fassent quand même à intervalles réguliers.
Cela demande un peu de tests pour les divers paramètres de temporisation mais ça fonctionne assez bien pour des exemples simples.

Je ne débute pas (à moins que tu ne parles pas de moi ?). Bien sûr que l'on peut faire comme tu l'as dit, et cela se montre même plus simple dans le cas étudié.

Cependant, ça peut tout de même être pratique de simuler des threads. Pour ce faire, il faut déjà savoir utiliser les interruptions (je conseille de faire la routine en asm car les interruptions doivent être rapides. De toutes façons, on n'a même pas le choix car il faut jouer sur le stack).

Donc on active l'interruption, on lui envoie dans une variable quelque par dans la RAM l'adresse du stack du 2e thread en y mettant en haut de la pile l'adresse du thread puis la valeur des variables, par exemple (save), et on peut continuer l'exécution. L'interruption, quant à elle, va, à chaque fois qu'elle sera appelée, commencer par pusher tous les registres dans le stack, ensuite, elle échange SP avec (save) : on a ainsi le SP de l'autre thread. Il ne reste plus qu'à poper dans les registres puis à faire reti : ça va aller dans le deuxième thread car le haut de la pile est l'adresse de celui-ci.
Image ImageImage
Avatar de l’utilisateur
mdr1Premium
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 44%
 
Messages: 1083
Images: 12
Inscription: 28 Mar 2011, 00:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Je voyage toujours en première.

Re: Faire tourner deux boucles en simultané

Message non lude Bisam » 29 Mar 2011, 16:49

mdr1 a écrit:
Bisam a écrit:Ce que tu décris est bien compliqué, mdr1, pour quelqu'un qui semble débuter.

Je ne débute pas (à moins que tu ne parles pas de moi ?). Bien sûr que l'on peut faire comme tu l'as dit, et cela se montre même plus simple dans le cas étudié.

Je pensais plutôt à l'initiateur de la question : Reuberts...
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile


Retourner vers TI-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 11 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
3096 utilisateurs:
>3075 invités
>11 membres
>10 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)