Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» rs
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 31 Mar 2024 - 14:35 par kenneth

» Bla Bla général du Jury
optimiser la boucle de saisie "Que faites-vous?" ? EmptyJeu 21 Mar 2024 - 8:51 par Dom50

» carte mère Oric (re)tracée
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 5 Mar 2024 - 18:54 par kenneth

» Meurtre à Grande Vitesse
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 25 Fév 2024 - 5:09 par Iurius

» ORIC-1 sur LE BON COIN
optimiser la boucle de saisie "Que faites-vous?" ? EmptyVen 23 Fév 2024 - 23:01 par Mcar

» ORIC ATMOS sur LE BON COIN
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 4 Fév 2024 - 12:06 par kiwilevrai

» Problème d'affichage des couleurs avec un Oric Atmos
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 27 Jan 2024 - 1:26 par pierbail

» Bienvenue dans le Forum des Oriciens
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 9 Jan 2024 - 12:33 par Dom50

» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
optimiser la boucle de saisie "Que faites-vous?" ? EmptyVen 29 Déc 2023 - 14:13 par Arcade-des-Monts

» Bonnes fêtes
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 26 Déc 2023 - 10:21 par Dom50

» Murders in Venice / Meutres à Venise
optimiser la boucle de saisie "Que faites-vous?" ? EmptySam 18 Nov 2023 - 22:44 par retroric

» Un clavier PS/2 pour tester un ORIC
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 27 Aoû 2023 - 9:49 par Voyageur

» Disquette 3" Sedoric
optimiser la boucle de saisie "Que faites-vous?" ? EmptyMar 1 Aoû 2023 - 14:22 par AtomeX

» faire un 6502 avec des phototransistor
optimiser la boucle de saisie "Que faites-vous?" ? EmptyDim 16 Juil 2023 - 17:26 par Voyageur

» Oricutron linux et DSK
optimiser la boucle de saisie "Que faites-vous?" ? EmptyJeu 29 Juin 2023 - 18:34 par Voyageur

Qui est en ligne ?
Il y a en tout 4 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 4 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 242 membres enregistrés
L'utilisateur enregistré le plus récent est AIRBUS44

Nos membres ont posté un total de 8922 messages dans 811 sujets
Sites Sympas

> Culture Club


-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

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

4 participants

Aller en bas

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

Message par goyo 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 : 199
Date d'inscription : 02/05/2014
Age : 52
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 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 : 840
Date d'inscription : 03/03/2014
Age : 54
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 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 : 199
Date d'inscription : 02/05/2014
Age : 52
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 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 : 840
Date d'inscription : 03/03/2014
Age : 54
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 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 : 199
Date d'inscription : 02/05/2014
Age : 52
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 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 : 840
Date d'inscription : 03/03/2014
Age : 54
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 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 : 271
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 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 : 199
Date d'inscription : 02/05/2014
Age : 52
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 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 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 : 199
Date d'inscription : 02/05/2014
Age : 52
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