Derniers sujets
» CEO MAG 347
optimiser la boucle de saisie "Que faites-vous?" ? EmptyAujourd'hui à 0:06 par kenneth

» rs
optimiser la boucle de saisie "Que faites-vous?" ? EmptyHier à 2:02 par kenneth

» Construire un authentique oric de toutes pièces
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 19 Mai 2019 - 18:52 par Jede

» ORIC ATMOS sur LE BON COIN
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 18 Mai 2019 - 21:17 par kenneth

» la chaine Retrovision
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 18 Mai 2019 - 17:10 par kenneth

» Visu d'été ?
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 18 Mai 2019 - 11:15 par Symoon

» Aux couleurs de l'Atmos
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 11 Mai 2019 - 18:20 par Moonchild

» Le Château maudit
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 11 Mai 2019 - 16:31 par Dom50

» Citadelle V2
optimiser la boucle de saisie "Que faites-vous?" ? EmptyJeu 9 Mai 2019 - 8:27 par markerror

» La tour fantastique . The diabolical tower
optimiser la boucle de saisie "Que faites-vous?" ? EmptyVen 3 Mai 2019 - 17:01 par Dom50

» Telestrat en panne?
optimiser la boucle de saisie "Que faites-vous?" ? EmptyJeu 2 Mai 2019 - 18:25 par Symoon

» Alim pour l'Oric a réaliser sois-même.
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 30 Avr 2019 - 11:02 par froggy

» Scans programmes Oric
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 30 Avr 2019 - 10:38 par markerror

» Le secret de Kaipur
optimiser la boucle de saisie "Que faites-vous?" ? EmptyLun 29 Avr 2019 - 19:22 par kenneth

» Tyrann
optimiser la boucle de saisie "Que faites-vous?" ? EmptyLun 29 Avr 2019 - 13:14 par Camille2005

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

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 179 membres enregistrés
L'utilisateur enregistré le plus récent est philgood1351fr

Nos membres ont posté un total de 7152 messages dans 617 sujets
Portail ORIC




optimiser la boucle de saisie "Que faites-vous?" ?

Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty optimiser la boucle de saisie "Que faites-vous?" ?

Message par goyo le Jeu 15 Mai 2014 - 10:29

Voici une boucle qui permet la saisie d'un texte tout en traitant des événements dans la même boucle.
Cette boucle me permet de saisir les commandes de l'aventurier après la phrase "Que faites-vous?".

Le problème est qu'elle est assez lente, quelqu'un verrait il le moyen de l'optimiser (mais toujours en Basic) afin de gagner en rapidité ?

Code:
10310 AF=0:CUR=127:R$=CHR$(13):XX=12:
GP=10410:GC=10420:TI=0'TIMER          
  
10312 IFAS=#BD46THENXX=8' AS=position sur la ram vidéo  
  
10315 GOSUBGC'affiche curseur
  
10316 '
10320 REPEAT                        
                                        
  
10330 K$=KEY$                        
                                        
  
10340 IFK$=CHR$(13)THEN10380        
  
10345 ' saisie texte normal
10350 IFK$>R$ANDK$<CHR$(127)ANDTX<XXTHENGOSUBGP:TX=TX+1:TEX$=TEX$+K$:GOSUBG
C
10355 ' delete
10360 IFK$=CHR$(127)ANDTX>0THENTX=TX-
1:TEX$=LEFT$(TEX$,TX):ZAP:GOSUBGC
  
10375 TM=TM+1:FORVV=1TO10:NEXTVV    
  
10376 ' traite des evennements liés à la room courante
10377 GOSUB 4000' GESTION EVENNEMENTS
  
10380 UNTILK$=CHR$(13)ORMO=1' mo=mort        
  
10385 '                              
  
10387 POKEAS+TX,32'affiche le curseur à la derniere position de TX                
  
10390 RETURN                        
  
10400 'afffiche cursor              
  
10410 '                              
  
10415 POKEAS+TX,ASC(K$):PING:RETURN' affiche le caractere saisi  
  
10420 POKEAS+TX,CUR:POKEAS+TX+1,32:RE
TURN' affiche le curseur    
goyo
goyo

Messages : 157
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par Hialmar le Jeu 15 Mai 2014 - 10:38

Salut,

Déjà tu peux virer ta boucle autour de VV qui ne fait rien.

Ensuite, perso, je ne testerai les événements dans la pièce (GOSUB 4000) que tous les X pas de boucle globale (X étant à dimensionner en fonction du temps que prend la boucle sans la gestion des événements et avec cette gestion). Ca devrait accélérer pas mal car à mon avis c'est ça qui est le plus long dans cette boucle.
Hialmar
Hialmar
Admin

Messages : 826
Date d'inscription : 03/03/2014
Age : 49
Localisation : Toulouse

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par goyo le Jeu 15 Mai 2014 - 12:50

Hialmar a écrit:Salut,

Déjà tu peux virer ta boucle autour de VV qui ne fait rien.

Ensuite, perso, je ne testerai les événements dans la pièce (GOSUB 4000) que tous les X pas de boucle globale (X étant à dimensionner en fonction du temps que prend la boucle sans la gestion des événements et avec cette gestion). Ca devrait accélérer pas mal car à mon avis c'est ça qui est le plus long dans cette boucle.

Merci Hialmar
concernant le
Code:
FORVV=1TO10:NEXTVV
c'est une réserve de performance qui disparaîtra pour la version finale.

Est ce que tu veux dire par tester tous les X, c'est par exemple traiter les événements une fois sur 10 dans la boucle ?  :
Code:
10377 X=X+1:IF X=10 THEN GOSUB 4000:X=0 ' traite evennements une fois sur 10 boucles
goyo
goyo

Messages : 157
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par Hialmar le Jeu 15 Mai 2014 - 13:06

Oui c'est exactement ça.

Je pense que c'est ce qui est derrière le GOSUB qui te ralenti non ?
Hialmar
Hialmar
Admin

Messages : 826
Date d'inscription : 03/03/2014
Age : 49
Localisation : Toulouse

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par goyo le Jeu 15 Mai 2014 - 17:21

Hialmar a écrit:Oui c'est exactement ça.

Je pense que c'est ce qui est derrière le GOSUB qui te ralenti non ?

Oui, merci pour l'idée.
Dans la routine évènement y a une série de IF, ça doit effctivement être significatif au niveau du temps gagné.
goyo
goyo

Messages : 157
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par Hialmar le Jeu 15 Mai 2014 - 17:24

Oui surtout que tes comparaisons doivent être entre chaines de caractères et donc il lui faut comparer caractère par caractère jusqu'à en trouver un de différent. Du coup ça doit ralentir pas mal.

A part ça, ce qui doit ramer c'est la construction de la chaine de caractères mais là sans faire d'assembleur je vois pas trop comment optimiser.
Hialmar
Hialmar
Admin

Messages : 826
Date d'inscription : 03/03/2014
Age : 49
Localisation : Toulouse

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par assinie le Jeu 15 Mai 2014 - 23:45

Bonsoir, tout dépend de ce que tu veux accélérer.

Si c'est global, tu as plutôt intérêt à faire des comparaisons sur des valeurs numériques:
IF A>B THEN xxxx est pratiquement 2 fois plus rapide que IF A$>CHR$(13) THEN xxxx

De même un GOTO NL est plus généralement plus rapide qu'un GOTO 1000

Si ce que tu veux c'est exécuter les lignes 10375 / 10377 et la procédure en 4000 le plus souvent possible entre 2 touches appuyées, il faut que tu élimines le plus tôt possible le cas général qui est "pas de touche enfoncée"...
Dans ce cas, tu peux remplacer la ligne 10330 par
10330 K$=KEY$:IF K$="" THEN 10375

Dans le même ordre d'idée, tu peux ajouter un GOTO 10375 à la fin de la ligne 10350.

Le problème sera la durée d'exécution de la routine en 4000 qui pourra ralentir la saisie puisqu'elle est exécutée plus souvent.

Ca donne un truc dans ce genre (j'ai ajouté des espaces pour la lisibilité):
Code:

10310 AF=0:CUR=127:R=13:XX=12: GP=10410:GC=10420:TI=0'TIMER

10311 L1=10375:L2=10380:GE=4000

10312 IF AS=#BD46 THEN XX=8' AS=position sur la ram vidéo
10315 GOSUB GC 'affiche curseur
10316 '
10320 REPEAT

10330 K$=KEY$:IF K$="" THEN GOTO L1
10340 K=ASC(K$):IF K=R THEN GOTO L2
10342 IF K<R OR K>CUR THEN GOTO L1
10345 ' saisie texte normal
10350 IF K<>CUR AND TX<XX THEN GOSUB GP:TX=TX+1:TEX$=TEX$+K$:GOSUB GC:GOTO L1
10355 ' delete
10360 IF K=CUR AND TX>0 THEN TX=TX-1:TEX$=LEFT$(TEX$,TX):ZAP:GOSUB GC

10375 TM=TM+1:FOR VV=1 TO 10:NEXTVV
10376 ' traite des evennements liés à la room courante
10377 GOSUB GE' GESTION EVENNEMENTS

10380 UNTIL K=R OR MO=1' mo=mort
10385 '
10387 POKE AS+TX,32'affiche le curseur à la derniere position de TX
10390 RETURN

10400 'afffiche cursor
10410 '
10415 POKE AS+TX,K:PING:RETURN' affiche le caractere saisi
10420 POKE AS+TX,CUR:POKEAS+TX+1,32:RETURN' affiche le curseur

GP devrait être égale à 10415
L'utilisation de K=ASC(K$) en 10340, permet de faire des tests numériques et d'éviter le ASC(K$) en ligne 10415

J'ai poussé l'utilisation des variables un peu loin c'est sûr...
assinie
assinie

Messages : 233
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par goyo le Ven 16 Mai 2014 - 18:33

assinie a écrit:Bonsoir, tout dépend de ce que tu veux accélérer.

Si c'est global, tu as plutôt intérêt à faire des comparaisons sur des valeurs numériques:
IF A>B THEN xxxx est pratiquement 2 fois plus rapide que IF A$>CHR$(13) THEN xxxx

De même un GOTO NL est plus généralement plus rapide qu'un GOTO 1000

Si ce que tu veux c'est exécuter les lignes 10375 / 10377 et la procédure en 4000 le plus souvent possible entre 2 touches appuyées, il faut que tu élimines le plus tôt possible le cas général qui est "pas de touche enfoncée"...
Dans ce cas, tu peux remplacer la ligne 10330 par
10330 K$=KEY$:IF K$="" THEN 10375

Dans le même ordre d'idée, tu peux ajouter un GOTO 10375 à la fin de la ligne 10350.

Le problème sera la durée d'exécution de la routine en 4000 qui pourra ralentir la saisie puisqu'elle est exécutée plus souvent.

Ca donne un truc dans ce genre (j'ai ajouté des espaces pour la lisibilité):
Code:

10310 AF=0:CUR=127:R=13:XX=12: GP=10410:GC=10420:TI=0'TIMER

10311 L1=10375:L2=10380:GE=4000

10312 IF AS=#BD46 THEN XX=8' AS=position sur la ram vidéo
10315 GOSUB GC 'affiche curseur
10316 '
10320 REPEAT

10330 K$=KEY$:IF K$="" THEN GOTO L1
10340 K=ASC(K$):IF K=R THEN GOTO L2
10342 IF K<R OR K>CUR THEN GOTO L1
10345 ' saisie texte normal
10350 IF K<>CUR AND TX<XX THEN GOSUB GP:TX=TX+1:TEX$=TEX$+K$:GOSUB GC:GOTO L1
10355 ' delete
10360 IF K=CUR AND TX>0 THEN TX=TX-1:TEX$=LEFT$(TEX$,TX):ZAP:GOSUB GC

10375 TM=TM+1:FOR VV=1 TO 10:NEXTVV
10376 ' traite des evennements liés à la room courante
10377 GOSUB GE' GESTION EVENNEMENTS

10380 UNTIL K=R OR MO=1' mo=mort
10385 '
10387 POKE AS+TX,32'affiche le curseur à la derniere position de TX
10390 RETURN

10400 'afffiche cursor
10410 '
10415 POKE AS+TX,K:PING:RETURN' affiche le caractere saisi
10420 POKE AS+TX,CUR:POKEAS+TX+1,32:RETURN' affiche le curseur

GP devrait être égale à 10415
L'utilisation de K=ASC(K$) en 10340, permet de faire des tests numériques et d'éviter le ASC(K$) en ligne 10415

J'ai poussé l'utilisation des variables un peu loin c'est sûr...

super ! avec ces conseils je pourrais pas mal optimiser.

En outre, est ce que utiliser un A% et plus rapide qu'un A normal ?
goyo
goyo

Messages : 157
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Optimiser la boucle de saisie

Message par Zodiac le Ven 16 Mai 2014 - 18:59

Bonjour GWEG,

Les variables entières ne procurent aucun avantage, bien au contraire elles sont plus lentes, car l'ORIC les transforment en virgule flottante avant utilisation.
Concernant les variables entières, le seul gain se situe au niveau de la place occupée en mémoire et seulement pour les tableaux d'entiers.

A+
Zodiac
Zodiac

Messages : 92
Date d'inscription : 27/01/2014
Localisation : Yvelines

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par goyo le Sam 17 Mai 2014 - 18:07

Zodiac a écrit:Bonjour GWEG,

Les variables entières ne procurent aucun avantage, bien au contraire elles sont plus lentes, car l'ORIC les transforment en virgule flottante avant utilisation.
Concernant les variables entières, le seul gain se situe au niveau de la place occupée en mémoire et seulement pour les tableaux d'entiers.

A+

Oki, merci Zodiac pour l'info Smile
goyo
goyo

Messages : 157
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

optimiser la boucle de saisie "Que faites-vous?" ? Empty Re: optimiser la boucle de saisie "Que faites-vous?" ?

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum