Bon certains se souviennent surement de zCalc, j'en avais parlé sur le site du contest, et un peu sur le forum

Un dimanche pluvieux en exil et je m'y suis remis (j'y avais pas touché depuis): j'ai fait vraiment le plus gros, il restera peut-être à rajouter certaines fonctions (trigo inverses, n-root, racine cubique, puissance 3 ) et à améliorer un peu la simplification avant rendu. Aussi à optimiser si j'ai le courage ou des conseils motivants (i.e qui montrent une grande espérance) dans le topic dédié.


J'ai évidemment fait pas mal de tests et debug moi-même et ça a l'air maintenant de plutôt bien marcher, bon cependant vous savez ce que c'est grin
Donc si y'en a parmi vous qui sont intéressés pour tester ça, notemment sur vraie calto (testé que sur VTI) et si possible me rapporter les éventuels bugs/erreurs/etc. Les conseils/impressions/autres sont aussi les bienvenues happy

Fonctionnement: vous rentrez une fonction dans Y1, lancer le programme depuis Ion (ou autre), la dérivée de Y1 doit alors être en Y2. Le programme n'affiche strictement rien, c'est normal.

Limites connues:
-devrait planter si l'expression est trop longue (jeu: trouver la limite ). Limite supérieur connue: 255 tokens (bon en dessous c'est un peu plus compliqué que juste le nombre de token d'entrée, faut voir comment ça va être étendue en dérivation ..). Fort probable que l'on puisse juste corrompre la RAM sans planter tout de suite (c'est quoi juste après saferam1 sur 83+ ? cheeky ). Je réfléchi à régler ça pour la finale .. (au minimum ne pas planter la calc, vu que sur 82/83 ça pourrait être catastrophique pour les élèves lors d'un DS ... )
-On est supposé respecter le prenthèsage. Surtout lorsque la parenthèse ouvrante est celle d'une fonction (i.e genre cos( .. ). Sinon, ça devrait aller, ..
-les fonctions non-reconnues, lettres (à l'exception de X .. ), etc, sont traités comme des constante. Au moins ça plante pas. (et pour les lettres, ce sont bien des constantes smile )
-La simplification n'est pas toujours parfaite (et le ne sera jamais, mais ça peut s'améliorer ).
-Le programme peut parfois tourner normalement, et c'est lorsque vous regarderez Y2 que ça plantera votre calc. (pour cause de l'affichage illimité de pleins de symboles qui n'ont rien à faire là). Ou si vous avez de la chance, peut vous renvoyer une expression de 10 lignes de token qui n'ont rien à faire là, mais sans planter. En théorie ça devrait pas vous arriver, sauf si j'ai laissé passer un gros bug (ça m'interesse smile )

Avant de tester sur vrai calc, je vous recommande évidemment de sauvegarder tout ailleurs cheeky



Voilà le fichier, bon c'est juste 83+ pour le moment pour cause de flemme, mais normalement je devrais porter ça sur 83 facilement et devrais y arriver sur 82

edit: fichiers plus à jour, tests déjà effectués

Merci d'avance à tous ceux qui voudront bien tester happy
Ah c'est toi ! Dsl, je m'y perd dans les pseudos yaronet/zContest.

Bon, j'ai commencé un test, j'ai rentré une fonction dans Y1, j'ai fait Asm(prgmZCALC , et puis rien.

Est-ce parce-que je n'ai pas utilisé Ion ? (qu'il m'est impossible d'utilser à cause de ce bug bien connu)

J'ai une TI83+
Oui (avec un autre shell ca devrait tourner, sinon je vais voir a ce que ca marche sans )
Existe-t-il un shell qui marche (sans ce fameux bug) ? (sans vouloir faire du HS)
( y'avait pas un patch / ? Ben sinon je ne suis pas un pro de la 83+, Mirage OS ? )
Non, Mirage OS ne marche pas non plus, et il n'existe pas de patch (enfin je crois).

Bon, pas grave, c'est compliqué de modifier le prog pour qu'il marche sans shell ?
non, dè que je reviens du taff je te fais ca smile
( sinon si y'avait un patch si t'as le probleme de l'écran )
Ah oui effectivement je crois me souvenir qu'il existe un patch, mais il me semble qu'il n'est destiné qu'aux TI-84.
tromb Fichier joint : zcalc_nostub.8xp

( sur mon VTI ça tourne avec asm( )

edit: bon j'ai édité ./1 , j'ai rajouté le lien vers ce fichier ainsi que le lien vers le fichier pour la TI-83 (ion). Ca fait deux heures que je cherche à faire marcher la version nostub 83 mais j'y arrive toujours pas tongue
Bon j'ai commencé à tester, il reste pas mal de problèmes à résoudre.

- le parenthèsage : ne pas mettre de parenthèses fermantes provoque soit un ram clear, soit un formule avec des (DS<()).

Donc c'est pas génial, surtout pour le ram clear.

- le signe multiplicatif :

Asin(x) donne sin(x)A

mais A*sin(x) donne A*cos(x) (tiens, ici on peut enlever la parenthèse fermante)


Pareil, 2(X-3) -> 0

et 2*(X-3) -> 2



Donc apparemment, si on met toujours les parenthèses fermantes, et le signe multiplicatif, ça marche.


Reste les fonctions ^3 , 3-sqrt , n-sqrt, abs (je sais pas si c'est très utile), ! , ^-1 , E , 10^ , les fonctions trigo inverses
Baruch (./10) :
(tiens, ici on peut enlever la parenthèse fermante)

Sur le résultat final ? (je trouve ca moche, bizare pour les non-initiés et je ne compte pas le faire. Déjà que faire toutes les simplifications usuelles ( du genre 0 + qqch -> qqch, ou (truc) + (machin) -> truc + machin ) c'est bien long et pas encore totalement supporté
Baruch (./10) :
Donc apparemment, si on met toujours les parenthèses fermantes, et le signe multiplicatif, ça marche.

Oui le signe multiplicatif a besoin d'être explicite.. ( c'est pas un bug mais une feature cheeky )

Pour les parenthèses fermantes.. en fait il supportes les parenthèses fermantes oubliées que lorsque celle ouvrante n'est pas celle d'une focntion (i.e cos(, tan(, etc. ) Mais bon je peux le faire, 10 lignes de codes. (mais si t'essayes (2*x+3) *( 8+x ca devrait passer )


Baruch (./10) :
Reste les fonctions ^3 , 3-sqrt , n-sqrt, abs (je sais pas si c'est très utile), ! , ^-1 , E , 10^ , les fonctions trigo inverses


Les fonctions inverses je vais les supporter (par ce que ca arrive, surtout en prepa, et y'a pas forcement des equivqlents faciles. Enfin l'expression des derives me fatigue d'avance tongue), le reste j'hésite (par ce que c'est rare, qu'il existe des equivalents, et que ca va me bouffer de la place )

Pour les multiplications implicites... vous croyez que c'est vraiment utile ? Je veux dire, excepté les codeurs ti-basic qui ne vivent plus que pour ne pas mettre de parenthèse fermantes et de signes * explicite ( wink ), y'a beaucoup de gens qui font ca ?


Sinon tu a l'air de l'avoir bien testé, thx happy
Baruch (./10) :
(tiens, ici on peut enlever la parenthèse fermante)


Non non, je parlais de l'exemple : si on entre A*sin(x , sa marche quand même.

Oui bien sûr les parenthèses fermantes c'est plus joli dans le résultat.

very (./11) :
Pour les parenthèses fermantes.. en fait il supportes les parenthèses fermantes oubliées que lorsque celle ouvrante n'est pas celle d'une focntion (i.e cos(, tan(, etc. ) Mais bon je peux le faire, 10 lignes de codes. (mais si t'essayes (2*x+3) *( 8+x ca devrait passer )


Non, il y a des bugs avec le signe de division :

(X-2)/(3*X+4 -> bug


Peu de débutants (car il faut bien l'avouer, c'est un programme pour débutants ^^) ne ferment pas les parenthèses, par contre on supprime souvent le signe multiplicatif.
Baruch (./12) :
Peu de débutants (car il faut bien l'avouer, c'est un programme pour débutants ^^)


sur 68k je vérifiais souvent mes dérivées non-triviales/faisais le tbl de variation/utilisais les dev limités/etc (touca utilise le calcul formel de la dérivée ), même en 2nd année de maths spé.

Et des fois maintenant je demande à ma v200 ou a Maple sans même calculer a priori à la main (à part skiller en calcul, comme je connais déjà touca, je vois plus trop l'intérêt de passer 20 mins sur un calcul compliqué pour avoir 5% de chance qu'il soit faux quand un ordi le fait en 2 secs. Avec la prépa j'ai déjà été servit ... )


Sinon y'a des trucs un peu étrange: pour les parenthèses, il devrait faire exactement l'inverse sur les deux exemples que tu cites cheeky
Bon ok, c'est vrai que c'est toujours utile un programme de dérivation, mais si c'est seulement pour vérifier ou avoir un aperçu, il faut que le prog soit nickel.

Pour les exemples, j'ai vérifié, même résultats.
Bha c'est une beta, je comte releaser une finale qui ne plante pas ( et c'est pour l'usage qu'on veut, je remarquais juste que non le calcul formel ca sert pas qu'aux debutants. D'ailleurs si tu crois que les ingé se font chier a calculer a la main cheeky ), même quand l'user rentre des trucs pas terrible.

C'est un peu pour ca que je voulais avoir du retour, voir tous les trucs a corriger .. ( on voit pas toujours tout soi même )

Pas d'autres courageux sinon ? (notemment pour 83, c'est testé pour l'instant que sur VTI .. )
Je veux bien tester sur 82 STATS si j'arrive à remettre la main dessus et que j'ai les piles qu'il faut smile
hm ouais ça serait cool. Normalement la version 83 tourne ?

Pour la 82 legacy je galère un peu (room calls moins documents, pas tout à ait identiques ? ) mais devrait y arriver
T'utilises beaucoup de rom calls dans ta source ? La plupart sont remplaçables par des routines (faut chercher sur wikiti), et c'est beaucoup plus rapide la plupart du temps (par contre celles pour stocker dans les variables du TI-OS avec les OP ça je pense pas que ce soit optimisable et compatible à 100% avec la 82).
J'utilise les rom calls juste pour accéder/sauvegarder Y1/Y2. ( 4 roms call, 5 appels )
Bon vu que je connais le format d'enregistrement des y-var, le format de la VAT, je pourrais m'en passer (enfin à la main y'a un truc qui serait chiant, c'est redimensioner Y2 'proprement'. Sinon ça me ferait perdre de la place pour un gain de vitesse absolument négligeable. )

( de ce que j'ai lu ca a l'air d'être bien semblable quand même sur 82. )
C'est quoi le nom des rom calls ? (Par contre il n'y a absolument rien sur la 82 dans le wikiti.)
Y'a pas vraiment de nom commun donné aux roms calls sur 82, mais en gros c'est _Mov9ToOP1 , _FindSym, _DelVar, _CreateEqu.

Toutes ont l'air d'avoir leur versions 82 référencé, sauf _Delvar. (cf les fichiers txt sur la rom de la 82. Cf par exemple http://karma.ticalc.org/romdata.txt ou http://www.ticalc.org/pub/text/calcinfo/82rom_19.006.txt (bon après faut faire gaffe aux différences de rom, mais les déclages d'adresses sont conus. ). Par contre c'est très peu documenté. A priori pour l'instant c'est _Mov9ToOP1 ou _FindSym qui me posent problème (p-t simplement pas les mêmes arguments .. ), mais elles sont remplassables à la main. (parser la VAT et comparer pour choper Y1 .. )

Enfin je trouverais, et j'ai bien quelques idées de bidouilles pour si je dois m'en passer.
Apparemment le '_Mov9ToOP1' peut être remplacé par un simple 'rst 20h', mais pour le '_FindSym' je sais pas. Le '_Delvar' c'est pour supprimer Y2 s'il existe déjà ?
Oui j'ai déjà lu hein.
les Yi existent toujours (d'après ce que j'ai compris .. ) mais les deleter sert à les redimensioner à 0 (pasque quand tu fais _createEqu, il doit s'assurer que la place est suffisante mais s'il y en a trop ça part goto leak quoi .. ).

J'ai vraiment la flemme de regarder comment ça marche pour le redimensionement touça (a priori ca risque de décaller tout le reste dérrière ..), mais bon au pire un ""->Y2 en basic règle le problème. Y'a un moyen simple d'exécuter du code basic ? (je veux dire, plus simple que de créer un programme temporaire ) ?
very (./23) :
Oui j'ai déjà lu hein.

(Nan mais je disais ça parce que je le savais déjà, j'ai pas encore eu le temps de tout lire cheeky)
very (./23) :
Y'a un moyen simple d'exécuter du code basic ? (je veux dire, plus simple que de créer un programme temporaire ) ?

A prioris sans quitter Ion, non, mais en lançant ton programme avec un 'lanceur' en TI-Basic du genre :

""&#8594;Y2:Asm(prgmX
ClrHome:Output(1,1,"


Ça peux le faire (mais faut que ton programme ne nécessite pas de shell et sur 82 je sais pas si c'est facilement possible).
sur 82 c'est impossible, et appeler le shell pour exécuter tel prog à ma connaissance ça se fait pas
( sur 83 on peut mais ça fait au minimum appel à un loader si j'ai bien compris, pasque y'a des problèmes avec les relogements etc. )
Sur 83 c'est possible avec 'send(9prgmX' ou le loader d'Ashell (ZLOAD), mais je sais plus trop comment on s'en sert...
nan mais même avec sen(9prgmX ils utilisent au minimum un loader, parceque send(9 n'est pas un vrai équivalent d'asm( sur 83+, pour exécuter du code 'normal' faut un truc en plus. (j'ai pas très bien compris ni trop cherché à comprendre ce qui manquait, mais a priori c'est une question de relogement )

Enfin y'a deux méthodes pour appeler depuis un prog basic: passer le nom du prog en argument (ans) et appeler zasmloader, ou que dans ton programme asm au début tu copie un peu de code héxa qui va appeler genre venus qui ve venir reloger à la volée..
Bon en fait après bien du debug inutile mon problème sur 82 vient simplement de Crash (le kernel): très visiblement il écrit le programme relogé à l'endroit même où sont les Y1 etc, et doit les sauvegarder ailleurs (à la fin c'est restauré ). Par contre apperement c'est pas sauvegardé juste après.. (enfin j'ai regardé un peu j'ai pas trouvé .. )

Enfin en fait c'était dans le programeur-readme:

Don't use VAT ROM_CALLs in CrASH because relocation will make the VAT's
pointer wrong. We have an idea to fix this, but this will not be done until
version 2.0


Bon ben je vais être obligé de prendre un autre shell .. Comme quoi des fois si on veut pas perdre 10h autant lire le readme pendant 5mn cheeky
Je m'y connais pas trop en shell sur TI 82 mais il me semblait qu'SNG était le meilleur, non ? (le plus compatible du moins vu qu'apparemment il marchait sur toutes les ROMs.)

'fin c'est clair que ce genre de problème c'est assez chiant à repérer : la plupart du temps il faut toujours faire attention aux libs/shells qu'on utilise à cause de ça : avec GBA Lib, je peux pas utiliser les romcalls d'affichage de texte (Saferam3) sans corrompre la mémoire ou désactiver des flags, ce qui est assez dommage, et j'espère que ce sera plus le cas avec GBA Lib 2 cheeky.
deeph (./29) :
il me semblait qu'SNG était le meilleur


C'est discutable. L'immense majorité du parc tourne sous Crash/crash 19.006, ( les vieux genre OS82 ou ash sont hors jeu ), ace et SNG sont un peu gros pour des fonctionnalités en plus qui me sont totalement inutiles.
Comme dit gh dans l'unficatoin faq:
The choice is hard, because, to me, there isn't really a "best ti-82 shell", they all have drawbacks.