Poster un nouveau sujet Poster une réponse
Mon 1er vrai programme en ASM : formules d'aires et volumes
Auteur Message
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 07 Juil 2011, 21:33   Citer 

Comme l'indique le titre, voici mon premier programme en assembleur (excepté une "clrhome" et quelques "Hello world!"). Il tourne sous ion et affiche les formules usuelles d'aires et de volumes.

les liens:
-le programme pour la TI : FORMULES.83p
-la source (voir plus bas) : FORMULES.z80
-le lanceur du compilateur : compiler2.bat
-le compilateur même : spasm.exe
-le fichier include : ion.inc

N'UTILISER QU'AVEC UNE TI82stats, TI82stats.fr, ou TI83(non+)
JE NE SUIS NULEMENT RESPONSABLE DE L'UTILISATION DE CE PROGRAMME (ni bugs possibles, ni punition pour triche, ni autre).




Voici le code source

Code
   .nolist ;        début de header (entête nécessaire à la compilation)
#include "ion.inc"
   .list
#ifdef TI83P
   .org progstart-2
   .db $BB,$6D
#else
   .org progstart
#endif
   ret ;        fin du header
   jr nc,start;          saut au label "start
   .db "FORMULES",0 ;    nom du programme sous ion (sous forme de chaine d'où le ",0"
 
start:;                  label "Start": début du programme
   ld   hl,0    ;on charge 0 dans le registre (variable temporaire) hl
   ld   (currow),hl       ;en place le curseur sur la ligne 0 (en haut)
   ld   hl,0    ;idem mais pour la collone
   ld   (curcol),hl   ;idem mais pour la collone
   ld   hl,titre1     ;met le texte de la variable "titre1" (voir fin du programme)dans hl
   call _puts            ; affiche le contenu de hl en grosse police en haut à gauche

   ld   a,7
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,carre
   call _vputs      ; idem mais petite police et coordonnées en pixels

   ld   a,13
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,rectangle
   call _vputs

   ld   a,19
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,triangle
   call _vputs

   ld   a,25
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,losange
   call _vputs

   ld   a,31
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,disque
   call _vputs

   ld   a,37
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,parallelogramme
   call _vputs

   ld   a,43
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,trapeze
   call _vputs

   ld   a,49
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,cerfvolant
   call _vputs

   ld   a,55
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,sphere
   call _vputs


   call _getkey;     appelle la routine "getkey": attente d'une touche + valeurs dans a (un autre registre)
   call _clrlcdf;     appelle la routine "clrlcdf": efface l'écran

   ld   hl,0
   ld   (currow),hl
   ld   hl,2
   ld   (curcol),hl
   ld   hl,titre21
   call _puts

   ld   hl,1
   ld   (currow),hl
   ld   hl,4
   ld   (curcol),hl
   ld   hl,titre22
   call _puts

   ld   a,15
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,cube
   call _vputs

   ld   a,21
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,parallelepipederectangle1
   call _vputs

   ld   a,27
   ld   (penrow),a
   ld   a,4
   ld   (pencol),a
   ld   hl,parallelepipederectangle2
   call _vputs

   ld   a,33
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,prisme
   call _vputs

   ld   a,39
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,cylindre
   call _vputs

   ld   a,45
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,cone
   call _vputs

   ld   a,51
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,pyramide
   call _vputs

   ld   a,57
   ld   (penrow),a
   ld   a,1
   ld   (pencol),a
   ld   hl,boule
   call _vputs

   call _getkey

   ret; retourne à ion



titre1:     ;variable "titre1" ...
   .db"Formules d'aires",0 ;... contenu : une chaîne (d'où guillemets et ",0")
carre:
   .db"Carre : A=c*c",0
rectangle:
   .db"Rectangle:A=L*l",0
triangle:
   .db"Triangle:A=(b*h)/2",0
losange:
   .db"Losange:A=(d1*d2)/2",0
disque:
   .db"Disque:A=pi*r*r",0
parallelogramme:
   .db"Parallelogramme:A=b*h",0
trapeze:
   .db"Trapeze:A=(B+b)/2*h",0
cerfvolant:
   .db"Cerf-volant : A=(d1*d2)/2",0
sphere:
   .db"Sphere:4*pi*r*r",0

titre21:
   .db"Formules de",0
titre22:
   .db"volumes",0
cube:
   .db"Cube:V=c*c*c",0
parallelepipederectangle1:
   .db"Parallelepipederectangle:",0
parallelepipederectangle2:
   .db"V=l*L*h",0
prisme:
   .db"Prisme:V=B*h",0
cylindre
   .db"Cylindre:V=pi*r*r*h",0
cone:
   .db"Cone:V=r*r*h*pi/3",0
pyramide:
   .db"Pyramide:V=B*h/3",0
boule:
   .db"Boule:V=4/3*r*r*r",0
.end;     dit au compilateur d'arreter



Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Jeu 07 Juil 2011, 21:52   Citer 

Et bien félicitations! ahh.gif =) Je trouve ça hyper compliqué quand même l'assembleur...

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 07 Juil 2011, 22:21   Citer 

Plus le language est proche de la machine et plus c'est puissant et compliqué.

J'ai retrouvé ion puis testé, c'est très bien ! bigmouth.gif
C'est faisable en basic, mais ça gère pour un premier programme assembleur ! BRAVO.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 08 Juil 2011, 9:50   Citer 

Ah bon!! Et comment fait tu sur TI82stats pour avoir les deux polices en même temps et les minuscules? (sur TI83+, je crois que c'est facile, mais sur TI82stats, sauf pixel par pixel, je ne voie pas.

Sinon, j'édite le code pour rajouter des commentaires (ce qui suit les ";" : c'est comme ça qu'on les fait en ASM).

EDIT: version 2 : 620 octés au lieu de 701, utilisation des carractères spéciaux pour une meilleur lisibilité et version pour TI83+ (non testée, mais vue que la version pour TI82stats compillée simultanémant fonctionne, il ne devrait pas y avoir de problèmes; néanmoins, je décline toute responsbilité dans le cas où il y en aurrait).

les liens :
-le programme pour la TI82stats/TI83 : FORMULES.83p
-le programme pour la TI83+ : FORMULES.8xp
-la source (voir plus bas) : FORMULES.z80
-le lanceur du compilateur : compiler2.bat
-le compilateur même : spasm.exe
-le fichier include : ion.inc

la source:

Code
   .nolist
#include "ion.inc"
   .list
#ifdef TI83P
   .org progstart-2
   .db $BB,$6D
#else
   .org progstart
#endif
   ret
   jr nc,start
   .db "FORMULES",0
 
start:
   ld   hl,0
   ld   (currow),hl
   ld   hl,0
   ld   (curcol),hl
   ld   hl,titre1
   bcall _puts

   ld   hl,$0701
   ld   (pencol),hl
   ld   hl,carre
   bcall _vputs

   ld   hl,$0D01
   ld   (pencol),hl
   ld   hl,rectangle
   bcall _vputs

   ld   hl,$1301
   ld   (pencol),hl
   ld   hl,triangle
   bcall _vputs

   ld   hl,$1901
   ld   (pencol),hl
   ld   hl,losange
   bcall _vputs

   ld   hl,$1F01
   ld   (pencol),hl
   ld   hl,disque
   bcall _vputs

   ld   hl,$2501
   ld   (pencol),hl
   ld   hl,parallelogramme
   bcall _vputs

   ld   hl,$2B01
   ld   (pencol),hl
   ld   hl,trapeze
   bcall _vputs

   ld   hl,$3101
   ld   (pencol),hl
   ld   hl,cerfvolant
   bcall _vputs

   ld   hl,$3701
   ld   (pencol),hl
   ld   hl,sphere
   bcall _vputs


   bcall _getkey
   bcall _clrlcdf

   ld   hl,0
   ld   (currow),hl
   ld   hl,2
   ld   (curcol),hl
   ld   hl,titre21
   bcall _puts

   ld   hl,1
   ld   (currow),hl
   ld   hl,4
   ld   (curcol),hl
   ld   hl,titre22
   bcall _puts

   ld   hl,$0F01
   ld   (pencol),hl
   ld   hl,cube
   bcall _vputs

   ld   hl,$1501
   ld   (pencol),hl
   ld   hl,parallelepipederectangle1
   bcall _vputs

   ld   hl,$1B04
   ld   (pencol),hl
   ld   hl,parallelepipederectangle2
   bcall _vputs

   ld   hl,$2101
   ld   (pencol),hl
   ld   hl,prisme
   bcall _vputs

   ld   hl,$2701
   ld   (pencol),hl
   ld   hl,cylindre
   bcall _vputs

   ld   hl,$2D01
   ld   (pencol),hl
   ld   hl,cone
   bcall _vputs

   ld   hl,$3301
   ld   (pencol),hl
   ld   hl,pyramide
   bcall _vputs

   ld   hl,$3901
   ld   (pencol),hl
   ld   hl,boule
   bcall _vputs

   bcall _getkey

   ret



titre1:
   .db"Formules d'aires",0
carre:
   .db"Carr",$96," : A=c",$12,0
rectangle:
   .db"Rectangle:A=L*l",0
triangle:
   .db"Triangle:A=(b*h)/2",0
losange:
   .db"Losange:A=(d1*d2)/2",0
disque:
   .db"Disque:A=",$C4," r",$12,0
parallelogramme:
   .db"Parall",$96,"logramme:A=b*h",0
trapeze:
   .db"Trap",$97,"ze:A=(B+b)/2*h",0
cerfvolant:
   .db"Cerf-volant : A=(d1*d2)/2",0
sphere:
   .db"Sph",$97,"re:4",$C4," r",$12,0

titre21:
   .db"Formules de",0
titre22:
   .db"volumes",0
cube:
   .db"Cube:V=c",$D5,0
parallelepipederectangle1:
   .db"Parall",$96,"l",$96,"pip",$97,"de-rectangle:",0
parallelepipederectangle2:
   .db"V=L*l*h",0
prisme:
   .db"Prisme:V=B*h",0
cylindre
   .db"Cylindre:V=",$C4," r",$D3,"*h",0
cone:
   .db"C",$4A,"ne:V=",$C4," r",$12,"*h/3",0
pyramide:
   .db"Pyramide:V=B*h/3",0
boule:
   .db"Boule:V=4/3*r",$D5," ",$C4,0





Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 08 Juil 2011, 13:02   Citer 

J'ai pas dis que ce serait beau en basic tongue.gif. L'affichage est faisable mais moins beau.
L'asm est nécessaire pour que ce soit beau. Et c'est beau ! happy.gif

C'est super, mais il manque pi à la formule de volume de la boule.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 08 Juil 2011, 19:35   Citer 

Ahhhhhhhh!
J'édite imédiatement.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 08 Juil 2011, 20:36   Citer 

Voici la v3 qui fait 602 octés:
les fichiers qui changent :
-Le fichier pour les TI83+ : FORMULES.8xp
-Le fichier pour les TI83/82stats/82stats.fr : FORMULES.83p
-La source (cf en-dessous) : FORMULES.z80

Voici la source :

Code
   .nolist
#include "ion.inc"
   .list
#ifdef TI83P
   .org progstart-2
   .db $BB,$6D
#else
   .org progstart
#endif
   ret
   jr nc,start
   .db "FORMULES",0
 
start:
   ld   hl,$0000
   ld   (currow),hl
   ld   hl,titre1
   bcall _puts

   ld   hl,$0701
   ld   (pencol),hl
   ld   hl,carre
   bcall _vputs

   ld   hl,$0D01
   ld   (pencol),hl
   ld   hl,rectangle
   bcall _vputs

   ld   hl,$1301
   ld   (pencol),hl
   ld   hl,triangle
   bcall _vputs

   ld   hl,$1901
   ld   (pencol),hl
   ld   hl,losange
   bcall _vputs

   ld   hl,$1F01
   ld   (pencol),hl
   ld   hl,disque
   bcall _vputs

   ld   hl,$2501
   ld   (pencol),hl
   ld   hl,parallelogramme
   bcall _vputs

   ld   hl,$2B01
   ld   (pencol),hl
   ld   hl,trapeze
   bcall _vputs

   ld   hl,$3101
   ld   (pencol),hl
   ld   hl,cerfvolant
   bcall _vputs

   ld   hl,$3701
   ld   (pencol),hl
   ld   hl,sphere
   bcall _vputs


   bcall _getkey
   bcall _clrlcdf

   ld   hl,$0200
   ld   (currow),hl
   ld   hl,titre21
   bcall _puts

   ld   hl,$0401
   ld   (currow),hl
   ld   hl,titre22
   bcall _puts

   ld   hl,$0F01
   ld   (pencol),hl
   ld   hl,cube
   bcall _vputs

   ld   hl,$1501
   ld   (pencol),hl
   ld   hl,parallelepipederectangle1
   bcall _vputs

   ld   hl,$1B04
   ld   (pencol),hl
   ld   hl,parallelepipederectangle2
   bcall _vputs

   ld   hl,$2101
   ld   (pencol),hl
   ld   hl,prisme
   bcall _vputs

   ld   hl,$2701
   ld   (pencol),hl
   ld   hl,cylindre
   bcall _vputs

   ld   hl,$2D01
   ld   (pencol),hl
   ld   hl,cone
   bcall _vputs

   ld   hl,$3301
   ld   (pencol),hl
   ld   hl,pyramide
   bcall _vputs

   ld   hl,$3901
   ld   (pencol),hl
   ld   hl,boule
   bcall _vputs

   bcall _getkey

   ret



titre1:
   .db"Formules d'aires",0
carre:
   .db"Carr",$96," : A=c",$12,0
rectangle:
   .db"Rectangle:A=L*l",0
triangle:
   .db"Triangle:A=(b*h)/2",0
losange:
   .db"Losange:A=(d1*d2)/2",0
disque:
   .db"Disque:A=",$C4," r",$12,0
parallelogramme:
   .db"Parall",$96,"logramme:A=b*h",0
trapeze:
   .db"Trap",$97,"ze:A=(B+b)/2*h",0
cerfvolant:
   .db"Cerf-volant : A=(d1*d2)/2",0
sphere:
   .db"Sph",$97,"re:4",$C4," r",$12,0

titre21:
   .db"Formules de",0
titre22:
   .db"volumes",0
cube:
   .db"Cube:V=c",$D5,0
parallelepipederectangle1:
   .db"Parall",$96,"l",$96,"pip",$97,"de-rectangle:",0
parallelepipederectangle2:
   .db"V=L*l*h",0
prisme:
   .db"Prisme:V=B*h",0
cylindre
   .db"Cylindre:V=",$C4," r",$D3,"*h",0
cone:
   .db"C",$4A,"ne:V=",$C4," r",$12,"*h/3",0
pyramide:
   .db"Pyramide:V=B*h/3",0
boule:
   .db"Boule:V=4/3*r",$D5,"*",$C4,0
.end



Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Programaths



Autorisation : Membre
Nb de messages : 178
Inscrit le : Sam 02 Avr 2011, 12:53
Posté le : Sam 09 Juil 2011, 19:54   Citer 

Sandro, j'ai essayé de me lancer dans l'asm mais... la compilation ça bloque ! crazy.gif j'ai suivi de A à Z le fofo SDZ sur les début de la programmation asm... j'ai téléchargé le kit avec Tasm, virtual TI et le asm.bat mais... après je créé un fichier texte, je change l'extention en .z80. et après... je bloque :p

merci

----------------------
"Des millions de gens ont vu tomber une pomme, Newton est le seul a s'être demandé pourquoi ."

"L'urgent est fait, l'impossible est en cours.
un probléme a toujours une solution, la solution est de trouver le probléme, pour les miracles, prévoir un délai ...
"
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Dim 10 Juil 2011, 20:27   Citer 

Si tu cherche de l'aide pour l'ASM, je te conseillerait le forum des z80 sur yAronnet, il y a 2-3 membres qui m'ont l'air de bien s'y connaitre (ce sont eux qui m'ont permis de réussir une compilation après plus de 40 posts (je suis nul en informatique).

Sinon tu peut essayer de télécharger tous les fichiers de la v2 (sauf le .83p et le .8xp) et de lancer "compiler2.bat" pour voir (normalement ça devrait s'ils sont tous dans le même dossier).

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Cocodidou



Autorisation : Membre
Nb de messages : 79
Inscrit le : Dim 15 Mai 2011, 11:33
Posté le : Lun 11 Juil 2011, 10:26   Citer 

Félicitations, c'est un très bon début pour quelqu'un qui dit n'avoir jamais touché à ça auparavant. Sache toutefois qu'Ion n'est pas indispensable pour ce genre de programmes.... Mais ça demande plus de programmation sans, évidemment.
Ti fournit un fichier include avec toutes les commandes que l'on retrouve habituellement en Basic, pour les exécuter en assembleur.

 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 12 Juil 2011, 14:17   Citer 

Merci beaucoup,
j'était déjà au courrant pour la possibilité de ne pas utiliser de shell pour l'ASM en utilisant les codes héxa et ":envoi(9prgmXXX", mais il semblerrait que Ion soit ma version la plus répondue qui permet en plus de compiler pour TI83+ en même temps.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes