Derniers sujets
» HRC (Hires RLE Compressed)
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 15 Oct 2019 - 20:16 par Hialmar

» CEO-MAG 354
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 13 Oct 2019 - 10:14 par didierv

» Version compatible 64 bits de WAVtoTAP ?
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 12 Oct 2019 - 16:48 par markerror

» Lot de livres et revues Oric sur LBC
optimiser la boucle de saisie "Que faites-vous?" ? EmptyVen 11 Oct 2019 - 21:37 par didierv

» rs
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMer 9 Oct 2019 - 0:29 par kenneth

» Écriture stylée sur MCP 40
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 6 Oct 2019 - 17:38 par Dbug

» CEO-MAG 353
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 6 Oct 2019 - 15:27 par Symoon

» Vieumikro 2019
optimiser la boucle de saisie "Que faites-vous?" ? EmptyLun 30 Sep 2019 - 16:34 par Hialmar

» [sujet Public] - le Ceo-Mag
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 29 Sep 2019 - 22:31 par didierv

» Vidéos en anglais
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 29 Sep 2019 - 15:22 par Dbug

» Nouvelles commandes SEDORIC
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 28 Sep 2019 - 20:57 par Sheld67

» A venir: nouvelle version TAP2WAV
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMer 25 Sep 2019 - 21:03 par Symoon

» Twilighte card, 6502 et joysticks
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 24 Sep 2019 - 12:29 par Jede

» Boitier Oric HD
optimiser la boucle de saisie "Que faites-vous?" ? EmptyLun 23 Sep 2019 - 12:58 par Jede

» OSDK & gnu/Linux...
optimiser la boucle de saisie "Que faites-vous?" ? EmptyVen 20 Sep 2019 - 4:39 par Symoon

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

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 193 membres enregistrés
L'utilisateur enregistré le plus récent est Oric Man

Nos membres ont posté un total de 7938 messages dans 684 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 : 178
Date d'inscription : 02/05/2014
Age : 48
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 : 830
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 : 178
Date d'inscription : 02/05/2014
Age : 48
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 : 830
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 : 178
Date d'inscription : 02/05/2014
Age : 48
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 : 830
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 : 254
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 : 178
Date d'inscription : 02/05/2014
Age : 48
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 : 178
Date d'inscription : 02/05/2014
Age : 48
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