en basic pour z80 ?
etendu?
t'en est ou?
Astuces
-
Syfo
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 2561
- Joined: 21 Feb 2006, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: prepa integree polytech (L2)
Re: Astuces
un petit truc
au lieu de faire {1-LABCDE on peut tout simplement faire {1-ABCDE ça peut sembler quasi inutile mais c'est utile en cas d'utilisation multiple de la même liste dans un même programme
au lieu de faire {1-LABCDE on peut tout simplement faire {1-ABCDE ça peut sembler quasi inutile mais c'est utile en cas d'utilisation multiple de la même liste dans un même programme
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
Trouvé un truc hier soir pour optimiser le code
ça donne
bon un peu compliqué mais grâce à ça j'ai réduit la taille de mon pendu de 30% (739-518)
(bien sûr = c'est inférieur ou égal et = supérieur ou égal)
voilà ^^
- Code: Select all
0-K
Repeat K
getkey-K
End
If K=41
"A-Str1
If K=42
"B-Str1
...
If K=93
"Z-Str1
ça donne
- Code: Select all
"ABCDEFGHIJKLMNOPQRSTUVWXYZ-Str0
...
0-K
Repeat K
GetKey-K
End
(K=51)(K=93)(fPart(K/10)=.5)(5int(K/10)-22+K-10int(K/10))+(K=41)(K=43)(K-10int(K/10
sub(Str0,Ans,1-Str1
...
bon un peu compliqué mais grâce à ça j'ai réduit la taille de mon pendu de 30% (739-518)
(bien sûr = c'est inférieur ou égal et = supérieur ou égal)
voilà ^^
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
Une petite astuce (très simple) qui peut faire gagner du temps :
plus particulièrement quand vous êtes dans une boucle, essayez de réduire au maximum les commandes données et de faire les calculs "simples" vous même.
Exemple :
plus particulièrement quand vous êtes dans une boucle, essayez de réduire au maximum les commandes données et de faire les calculs "simples" vous même.
Exemple :
- Code: Select all
:9²→X
:3→A
:XA→X
devient
:243→X
MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)My calculator programs
Mes programmes pour calculatrices
-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 14840
- Images: 1133
- Joined: 01 Jun 2007, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Twitter: adriweb
- GitHub: adriweb
Re: Astuces
cf premier post ^^
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
(héhé je me mets à l'ASM z80 syfo fais gaffe
)
Bon j'ai trouvé un truc assez intéressant pour ceux qui veulent des trucs avancés dans leurs programmes et qui ne peuvent pas ou ne veulent pas télécharger de programmes ASM
C'est l'équivalent des chaines Exec pour les 68k :
Allez commençons :
2 façons :
Utiliser la commande ExecAsm de Omnicalc ([PRGM] 2 fois) puis rentrer la chaine
ou
-Créer un nouveau programme
-Mettre ASMPrgm sur la première ligne (c'est dans le Catalog : [2nd]+[0])
-Taper les chiffres/lettres à la suite
-Ne pas oublier d'ajouter C9 à la fin du programme sinon ça bug
-Pour appeler : Asm(nomduprogramme
Ah oui aussi pour les fonctions sur l'écran il faut ajouter :
EF6A48 à la fin pour rafraichir l'écran.
Bon on commence :
Voilà c'était l'astuce du jour =)
le lien : http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm
Sinon j'en ai des petites :
et dans le prgmSUB :
Après l'ERR:UNDEFINED l'utilisateur pourra voir ce qu'il manque
voilà c'est tout pour aujourd'hui !
http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm

Bon j'ai trouvé un truc assez intéressant pour ceux qui veulent des trucs avancés dans leurs programmes et qui ne peuvent pas ou ne veulent pas télécharger de programmes ASM
C'est l'équivalent des chaines Exec pour les 68k :
Allez commençons :
2 façons :
Utiliser la commande ExecAsm de Omnicalc ([PRGM] 2 fois) puis rentrer la chaine
ou
-Créer un nouveau programme
-Mettre ASMPrgm sur la première ligne (c'est dans le Catalog : [2nd]+[0])
-Taper les chiffres/lettres à la suite
-Ne pas oublier d'ajouter C9 à la fin du programme sinon ça bug
-Pour appeler : Asm(nomduprogramme
Ah oui aussi pour les fonctions sur l'écran il faut ajouter :
EF6A48 à la fin pour rafraichir l'écran.
Bon on commence :
- Scroller l'écran à droite : 2140930E40060CB7CB1E2310FB0D20F5
- Scroller l'écran à gauche : 213F960E40060CB7CB162B10FB0D20F5
- Scroller l'écran en haut : 214C9311409301F402EDB0EB010C00EF304C
- Scroller l'écran en bas : 213396113F9601F402EDB823010C00EF304C
- Augmenter le contraste : 2147847EC604FE28D077C6D8CD0B00D310
- Diminuer le contraste : 2147847ED604D877C6D8CD0B00D310
- Mettre le contraste contenu dans X : EFE04AEFEF4AC6C0CD0B00D310
- Graph tout noir : 2140930100033EFFEF334C
- Effacer graph : EFD04B
- Inverser l'écran Home : FDCB05DEEF7945FDCB059E
- Inverser graph : 2140930100037E2F77230B78B120F7
- Inverser tous les écrans :
F33E20CD0B00D3103E80CD0B00D310060EC5063F2E7FCD0B00DB112C
CD0B00DB112FF57DCD0B00D311CD0B00DB11F1CD0B00D31110E5C110D8 - Cercles rapides : FDCB3CE6
- Ecran on/off: DB10CB6F20053E03D310C93E02D310
- Alpha lock : FDCB12E6FDCB12F6
- Permettre les minuscules : 21148A3E08AE77
- Enlever done: FDCB00AE
- Texte inversé ou non : 21F5893E08AE77
- APD : 210101224884FDCB08DEFB76
- Mettre l'APD à X (X=variable X) : EFE04AEFEF4AEB214884732372
- Eteindre la TI : 3E01D30376FDCB09A6
- "Powerdown" : EF0850
- Etat des batteries (dans Ans) : EFBF41EFB3502803EF9B41EFBF4A
- RAM libre : EFE542EF9247EF5641EFBF4A
- Version de l'OS : EF6F4CF578EF8C47EF6742EF6742F1EF8F47F7EFBF4A
- Version de l'Hardware : EFBA80EF8C47EFBF4A
- Getkey: EF7045FB76EF4447B728F8EF5641EFD14A
Voilà c'était l'astuce du jour =)
le lien : http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm
Sinon j'en ai des petites :
- pour savoir facilement si on est sur TI82 ou TI83+, utiliser abs : sur TI82 abs -1+1 donne 2 (considère comme abs(-1)+1), sur TI83(+) abs(-1+1 donne 0
- les erreurs :
- Code: Select all
PROGRAM:FIRST
...
...
Output(1,1,"ERR:prgmSUB manquant
prgmSUB
...
...
et dans le prgmSUB :
- Code: Select all
PROGRAM:SUB
Output(1,1," " (16 espaces)
...
...
...
Après l'ERR:UNDEFINED l'utilisateur pourra voir ce qu'il manque
voilà c'est tout pour aujourd'hui !
http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
tama wrote:Je propose de poster ici toutes les astuces que vous connaissez pour la programmation sur TI z80 ou sur TI z80 tout court
= Pour optimiser un programme :
Exemple :
prgmTEST
code non optimisé
- Code: Select all
0-A:0-B:0-C:0-D
Lbl 0
A+1-A
(A+B)x(C+D)-E
Disp E
If A1000
Then
Goto 0
Else
Goto 1
End
Lbl 1
Stop
Nombre total d'octets :
13+54=77 octets
1.Enlever les parenthèses
- Code: Select all
(A+B)x(C+D)-E
devient :
- Code: Select all
(A+B)x(C+D-E
Gain == 1 octet
2.Utiliser For( et End au lieu des goto (l'instruction Goto cherche le lbl correspondant et cela peut prendre du temps)
- Code: Select all
Lbl 0
A+1-A
(A+B)x(C+D)-E
Disp E
If A1000
Then
Goto 0
Else
Goto 1
End
devient :
- Code: Select all
For(A,1,1000
(A+B)x(C+D-E
Disp E
End
Gain == 12 octets
Gain total === 13 octets
3.Utiliser DelVar var au lieu de 0-var
Avantage : DelVar A et 0-A prennent autant de place mais on peut enchainer les DelVar (les coller)
- Code: Select all
0-A:0-B:0-C:0-D
devient :
- Code: Select all
DelVar BDelVar CDelVar D
(DelVar A est inutile puisque A sera utilisé pour faire une boucle)
Gain : 6 octets
Gain total : 19 octets
4.Mettre un "stop" en fin de programme ne sert à rien
- Code: Select all
Lbl 1
Stop
devient :
- Code: Select all
Lbl 1
Ou dans le cas actuel (suppression des labels et des goto) :
- Code: Select all
...
Disp E
End
(plus rien après mais attention à ne pas oublier le End sinon la boucle ne marche plus)
Gain : 1 octet
Gain total : 20 octets
5.Utiliser vos connaissances en maths et en programmation![]()
- Code: Select all
(A+B)x(C+D-E
devient
- Code: Select all
(A+B)(C+D-E
ou :
- Code: Select all
AC+AD+BC+BD-E
Gain : 1 octet
Gain total : 21 octets
6 (facultatif) : Installer Omnicalc ==http://www.ticalc.org/archives/files/fileinfo/226/22626.html
voilà
Bilan final :
+ Le programme a 21 octets de moins et la vitesse en plus correspondante![]()
- euh...
code final après optimisation :
- Code: Select all
DelVar BDelVar CDelVar D
For(A,1,1000
(A+C)(B+D-E
Disp E
End
13+43 = 56 octets
N'hésitez pas à poster vos astuces !!!![]()
P.S : Attention pour les connaissances en programmation : le programme peut devenir plus complexe
Attention aussi aux gros gros programmes, il faut avoir le cerveau correspondant![]()
tiens je viens de trouver une nouvelle optimisation :
au lieu d'utiliser E, utiliser Ans ici c'est plus avantageux :
donc ça donne :
- Code: Select all
DelVar BDelVar CDelVar D
For(A,1,1000
(A+C)(B+D
Disp Ans
End
J'ai gagné 2 octets

donc taille finale = 13+41=54 octets (ce qui fait une optimisation de 43% =))
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
tama wrote:(héhé je me mets à l'ASM z80 syfo fais gaffe)
Bon j'ai trouvé un truc assez intéressant pour ceux qui veulent des trucs avancés dans leurs programmes et qui ne peuvent pas ou ne veulent pas télécharger de programmes ASM
C'est l'équivalent des chaines Exec pour les 68k :
Allez commençons :
2 façons :
Utiliser la commande ExecAsm de Omnicalc ([PRGM] 2 fois) puis rentrer la chaine
ou
-Créer un nouveau programme
-Mettre ASMPrgm sur la première ligne (c'est dans le Catalog : [2nd]+[0])
-Taper les chiffres/lettres à la suite
-Ne pas oublier d'ajouter C9 à la fin du programme sinon ça bug
-Pour appeler : Asm(nomduprogramme
Ah oui aussi pour les fonctions sur l'écran il faut ajouter :
EF6A48 à la fin pour rafraichir l'écran.
Bon on commence :Il faut être prudent en utilisant ces chaines, comme pour les chaines Exec un seul chiffre faux et tout devient différent (crash voire pire ?)
- Scroller l'écran à droite : 2140930E40060CB7CB1E2310FB0D20F5
- Scroller l'écran à gauche : 213F960E40060CB7CB162B10FB0D20F5
- Scroller l'écran en haut : 214C9311409301F402EDB0EB010C00EF304C
- Scroller l'écran en bas : 213396113F9601F402EDB823010C00EF304C
- Augmenter le contraste : 2147847EC604FE28D077C6D8CD0B00D310
- Diminuer le contraste : 2147847ED604D877C6D8CD0B00D310
- Mettre le contraste contenu dans X : EFE04AEFEF4AC6C0CD0B00D310
- Graph tout noir : 2140930100033EFFEF334C
- Effacer graph : EFD04B
- Inverser l'écran Home : FDCB05DEEF7945FDCB059E
- Inverser graph : 2140930100037E2F77230B78B120F7
- Inverser tous les écrans :
F33E20CD0B00D3103E80CD0B00D310060EC5063F2E7FCD0B00DB112C
CD0B00DB112FF57DCD0B00D311CD0B00DB11F1CD0B00D31110E5C110D8- Cercles rapides : FDCB3CE6
- Ecran on/off: DB10CB6F20053E03D310C93E02D310
- Alpha lock : FDCB12E6FDCB12F6
- Permettre les minuscules : 21148A3E08AE77
- Enlever done: FDCB00AE
- Texte inversé ou non : 21F5893E08AE77
- APD : 210101224884FDCB08DEFB76
- Mettre l'APD à X (X=variable X) : EFE04AEFEF4AEB214884732372
- Eteindre la TI : 3E01D30376FDCB09A6
- "Powerdown" : EF0850
- Etat des batteries (dans Ans) : EFBF41EFB3502803EF9B41EFBF4A
- RAM libre : EFE542EF9247EF5641EFBF4A
- Version de l'OS : EF6F4CF578EF8C47EF6742EF6742F1EF8F47F7EFBF4A
- Version de l'Hardware : EFBA80EF8C47EFBF4A
- Getkey: EF7045FB76EF4447B728F8EF5641EFD14A
Voilà c'était l'astuce du jour =)
le lien : http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm
http://wikiti.denglend.net/index.php?title=83Plus:Basic:Tricks_ExecAsm
Dit moi avec le execAsm de omnicalc on peut marquer directement dans un programme:
- Code: Select all
:If X=1:ExecAsm(3E01D30376FDCB09A6 //éteindre TI
par exemple?
EDIT : Je viens d'essayer mais sans succès "ERR:SYNTAX"
Tutoriel sur l'axe parser, un langage de programmation pour z80 ultra rapide et beaucoup plus facile que l'ASM !
-
kindermoumouteProgrammeur
Niveau 14: CI (Calculateur de l'Infini)- Posts: 849
- Joined: 30 Sep 2009, 00:00
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ecole d'ingénieur informatique et industriel
Re: Astuces
c'est real(33,"chaine" si je me souviens bien, appuie 2 fois sur [PRGM] pour voir le menu avec les trucs spéciaux
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: Astuces
Tama wrote:tiens je viens de trouver une nouvelle optimisation :
au lieu d'utiliser E, utiliser Ans ici c'est plus avantageux :
donc ça donne :
- Code: Select all
DelVar BDelVar CDelVar D
For(A,1,1000
(A+C)(B+D
Disp Ans
End
J'ai gagné 2 octets
donc taille finale = 13+41=54 octets (ce qui fait une optimisation de 43% =))
Allez, soyons fou et optimisons encore !!
- Code: Select all
DelVar BDelVar CDelVar D
For(A,1,1000
Disp (A+C)(B+D
End
et puisque B, C et D valent 0, ils ne servent à rien et donc le programme devient :
- Code: Select all
For(A,1,1000
Disp 0
End
Là, c'est vraiment optimal ! (Mais le programme ne sert vraiment à rien...)

-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Posts: 5670
- Joined: 11 Mar 2008, 00:00
- Location: Lyon
- Gender:
- Calculator(s):→ MyCalcs profile
Who is online
Users browsing this forum: ClaudeBot [spider] and 6 guests