Derniers sujets
Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités :: 1 Moteur de rechercheAucun
Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion
Statistiques
Nous avons 243 membres enregistrésL'utilisateur enregistré le plus récent est paul225l
Nos membres ont posté un total de 8922 messages dans 811 sujets
optimiser la boucle de saisie "Que faites-vous?" ?
4 participants
Forum Oric :: Forums :: Forum Public :: BASIC
Page 1 sur 1
optimiser la boucle de saisie "Que faites-vous?" ?
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é ?
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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.
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- Admin
- Messages : 840
Date d'inscription : 03/03/2014
Age : 54
Localisation : Toulouse
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimiser la boucle de saisie "Que faites-vous?" ?
Oui c'est exactement ça.
Je pense que c'est ce qui est derrière le GOSUB qui te ralenti non ?
Je pense que c'est ce qui est derrière le GOSUB qui te ralenti non ?
Hialmar- Admin
- Messages : 840
Date d'inscription : 03/03/2014
Age : 54
Localisation : Toulouse
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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.
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- Admin
- Messages : 840
Date d'inscription : 03/03/2014
Age : 54
Localisation : Toulouse
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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é):
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...
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- Messages : 271
Date d'inscription : 09/02/2014
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Optimiser la boucle de saisie
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+
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- Messages : 92
Date d'inscription : 27/01/2014
Localisation : Yvelines
Re: optimiser la boucle de saisie "Que faites-vous?" ?
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
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Forum Oric :: Forums :: Forum Public :: BASIC
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 31 Mar 2024 - 14:35 par kenneth
» Bla Bla général du Jury
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur