Page 1 of 2

Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 11:20
by critor
AutoCalc est 2.5 fois plus lent sur sur TI-83+ basique que sur TI-83+SE/84+.
C'est parce que le processeur de la TI-83+ basique tourne à seulement 6MHz, contre 16MHz pour les autres.

Les TI-83/82Stats/76.fr ont aussi un processeur tournant à 6MHz, mais AutoCalc est encore plus lent sur ces modèles!!!
Pourquoi?...


AutoCalc est composé de divers sous-programmes codant des algorithmes destinés à chercher les formes exactes dans différents ensembles de nombres.

Parmi ces sous-programmes, il y en a qui sont appelés beaucoup plus souvent que d'autres:
  • Z1FRAC, qui fait la même chose que la commande basique -Frac
  • Z1RAC, qui simplifie un radical sous la forme a*rac(b)

AutoCalc sera donc sensiblement plus rapide en optimisant ces programmes.

C'est pour cela que dans les 3 versions, TI-83+/84+, TI-83/82Stats, et TI-76.fr, l'algorithme très simple de Z1RAC est codé en assembleur.


Parlons maintenant de Z1FRAC.
Il n'y a aucun moyen à ma connaissance en TI-Basic de récupérer les numérateur et dénominateur lorsque l'on utilise la commande -Frac.
Nous nous voyons donc condamné à coder un algorithme "lourd" de mise en fraction...

Ou alors d'utiliser de l'assembleur pour récupérer directement en mémoire les composantes du résultat de -Frac.

C'est cette dernière solution qui est mise en œuvre sur TI-83+/84+, car j'ai trouvé une routine toute faite en ce sens sur Internet.

Je n'ai pas pu trouver de routine équivalente sur TI-83/82Stats/76.fr, ces modèles n'étant pas compatibles avec les TI-83+ pour l'assembleur. Ils ont donc droit à l'algorithme basic complet, d'où la lenteur sur ces systèmes...


Et si, maintenant que j'en connais/comprends beaucoup plus sur ces calculatrices qu'il y a 2 ans, j'essayais de convertir le programme assembleur moi-même?

Les TI-83/82Stats/76.fr obtiendraient alors des performances identiques aux TI-83+ basiques avec AutoCalc! :#top#:


Allons-y!

En désassemblant à la main le programme assembleur de mise en fraction TI-83+, j'obtiens ça:
Code: Select all
b_call    _ZeroOP1
ld hl, op1+1
ld (hl), 'W'
b_call    _RclVarSym
b_call    _ToFrac
b_call    _PushRealO1
b_call    _ZeroOP1
ld hl, 'W'
ld (op1+1), hl
b_call    _StoOther
b_call    _OP1ExOP2
b_call    _PushRealO1
b_call    _ZeroOP1
ld hl, 'I'
ld (op1+1), hl
b_call    StoOther
RET


Voici les adresses mémoire TI-83+ de ces différentes mnémoniques, visibles en big-endian (à l'envers) dans le code:
Code: Select all
OP1 = 8478h
_ZeroOP1 = 41C5h
_RclVarSym = 4AE3h
_ToFrac = 4657h
_PushRealO1 = 43BAh
_StoOther = 4AD4h
_OP1ExOP2 = 421Fh


Sauf erreur, voici maintenant leurs équivalents sur TI-83:
Code: Select all
OP1 = 8039h
_ZeroOP1 = 428Eh
_RclVarSym = 4EECh
_ToFrac = 48D5h
_PushRealO1 = 4536h
_StoOther = 4ED8h
_OP1ExOP2 = 4306h



Je m'étais donc dit qu'en remplaçant les adresses directement dans le code, ça marcherait...
Et j'ai obtenu un "RAM Cleared", sur TI-76.fr et TI-83.

J'ai du faire une erreur, ou oublier un truc quelque part...

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 15:26
by critor
Yes!!! :#top#:


Viens de réussir une exécution d'un Z1FRAC assembleur sur TI-83, ROM 1.08.

Dans le programme originel TI-83+, les appels de routines système utilisent le code "EF".
ce qui curieusement provoquait un reset sur TI-83...

J'ai remplacé tous les appels "EF" par des appels "CD" et apparemment ça marche sur TI-83.

Je connais mal la différence entre ces 2 types d'appels systèmes...


Si il n'y a pas d'autre obstacle sur ma route, vous aurez peut-être ce soir la release d'AutoCalc 3.1, dont la version TI-83/82Stats/76.fr prendra moins de place en mémoire tout en étant plus rapide!!! :#top#:

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 15:38
by jacques
Bravo ! :#top#:

Vu qu'il y a pas mal de lycéens qui ont des ti82STATS, ton optimisation en aidera plus d'un !

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 16:10
by critor
Les premiers tests de comparaison sur vraies calculatrices sont impressionnants! :#top#:

Côte à côte: 2 TI-82 Stats.fr (une brune et une noire) faisant tourner respectivement les version 3.0 et 3.1 d'AutoCalc.


La différence se voit à l'oeil nu! En gros, la version 3.1 est 30% plus rapide, ce qui est une véritable bouffée d'oxygène lors de la recherche de formes exacte de nombres complexes par exemple!! :#top#: :#top#:

En plus, la version 3.1 prend moins de place!!! :#top#: :#top#: :#top#:

En prime, la version 3.1 est plus fiable!!!! :#top#: :#top#: :#top#: :#top#:
(j'avais du "brider" le programme basic de mise en fraction, sinon il pouvait chercher très longtemps...)


AutoCalc 3.1, bientôt sur TI-Bank!!!!! :#tritop#:

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 17:35
by Lionel Debroux
:#top#:

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 18:20
by lostro
Wow super, j'attends ca avec impatience

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 21:27
by critor
lostro wrote:Wow super, j'attends ca avec impatience



Comme promis, AutoCalc 3.1 est dès à présent en ligne!
http://tiplanet.org/index.php?mod=ar ... voirid=981

Nouveautés:
  • cœur assembleur de mise en fraction pour les versions TI-82Stats/83 et TI-76.fr, diminuant de temps de calcul d'environ 30% :#top#:
  • correction d'un bug dans les versions TI-82Stats/83 et TI-76.fr pour la résolution d'équations du 2nd degré, grâce à lostro
  • correction d'un bug dans la version TI-76.fr pour la gestion des formes binomiales

Version TI-83+/84+ inchangée.


Grâce au nouveau coeur, le programme tourne enfin sur TI-82Stats/83/76.fr à la même vitesse que sur TI-83+, et avec la même fiabilité que sur TI-83+/84+! :#top#:

Une grande nouvelle pour les possesseurs de TI-82Stats.fr, encore majoritaires dans les lycées.


Si vous écrasez les fichiers d'une ancienne version, vous pouvez vous débarrasser de Z1FRCBAS désormais inutile, afin d'économiser de la mémoire.


Bons calculs! :#top#:
http://tiplanet.org/index.php?mod=ar ... voirid=981

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 19 Sep 2010, 22:50
by Adriweb
Bravo ! :)

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 20 Sep 2010, 12:14
by critor
J'ai newsé sur AutoCalc 3.1 -> http://tiplanet.org/index.php?mod=ne ... iresid=862


Mis à part la correction de bugs éventuels, je ne prévois plus d'ajout de fonctionnalités dans un futur proche.

En effet, AutoCalc occupe déjà 6 à 10Ko selon les modules installés (9Ko avec les modules les plus utiles).


Si je vais au-delà de cette taille, on pourra lui faire les mêmes reproches qu'à SupraMaths.
Je dois laisser de la place pour que l'utilisateur installe d'autres choses.


De plus, l'absence de programmation fonctionnelle ne me permet pas de lui donner les mêmes capacités que mCAS sur Nspire.

On peut certes "simuler" des variables locales en enregistrant en début de sous-programme toutes les variables globales utilisées dans une liste et en les restaurant en fin de programme, ce qui permet même de faire de la récursivité (sous-programme qui s'appelle lui-même).

La première version que j'avais faite fonctionnait ainsi, mais les performances en étaient désastreuses.


Je n'utilise plus que des variables globales, et je crois que l'ensemble des sous-programmes d'AutoCalc lisent/modifient presque 100% des variables de type réel de la calculatrice (tout l'alphabet + même certaines bornes de la fenêtre graphique en mode paramétrique ou conique).

La TI-76.fr ne disposant pas de ces dernière bornes, j'ai du les remplacer par une liste de nombres, qui prend plus de place et de temps à gérer.

C'est une autre raison pour laquelle AutoCalc ne peut "quasiment" plus évoluer.

Re: Accélérer AutoCalc sur TI-83/82Stats/76.fr

Unread postPosted: 20 Sep 2010, 17:42
by tama
Si je ne dis pas de bêtise, le EF des ti83+ correspond a l'instruction bcall, pour appeler des rom call, alors que c'est call sur ti83, d'où le CD.
Excellent travail sinon ;)