1

Désolé, je crois qu'il sera posté 2 fois...

Salut à tous...
Ca fait que quelques jours que je me suis mis à l'ASM, alors, vous foutez pas trop de moi...
Voilà mon problème...

J'ai appris qu'on pouvait faire des additions dans les registres..
Par ex : move.w #234,D0
move.w #23,D1
add D0,D1 ; ou add.l, ou un truc du genre

Et on aura le résultat 267 dans D1...
Maintenant, une question toute conne...
Comment faire pour afficher ce résultat à l'écran ??
Est-ce qu'il faut le convertir en chaîne de caractères et l'afficher avec DrawStrXY (ça, y doit y avoir un rom call, puisque la TI le fait d'origine) ? Ou est-ce qu'y a une autre méthode ?

J'attends avec impatience vos réponses...Et merci d'avance...

2

** En C **

int mavar=23+ 234;
int buffer[10];
sprintf (buffer, "%i", mavar);


** En Asm **

  move.w #234,d0
  move.w #23,d1
  add.w d0,d1
  move.w d1,-(a7)
  pea string(pc)
  pea buffer(pc)
  jsr doorsos::sprintf
  lea 10(a7),a7
     ;le resultat est dans buffer

string dc.b "%i",0
buffer dc.b 0,0,0,0,0,0,0,0,0,0

3

faut le transformer en chaine de caracteres effectivement pour ensuite l'afficher avec DrawStrXY ou ta routine perso comme tu veux smile
avatar
pwet

4

A propo de routine perso je ne voa pas trop comment on peut faire... à par en écrivant un a un les lettres par des sprites ... Mais c'est plus long ?? non??cool

5

pour convertir un nb en carac utilise doorsos::sprintf
avec sur le stack
ton nb
adresse "%u"
adresse chaine de stockage

6

el Isard je crois que j'en avais fais une routines comme ca mais je n'utiliser pas les sprites:
je diviser par 10 jusqu'a ce que le quotient soit egal a 0 et apres ben men rapelle plus sad (je crois que j'ajouter 48=code ascii de 0 au quotient ainsi obtenu et je rajouter un caractere nul a la fin

ex:
nb=12
12 = 10*1+2
48+1=49
48+2=50
=>buffer=4950,0

mais je n'en suis pas sur !
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

7

Et c'est plus rapide que drawstr

8

????????????

9

Ebn fait' le principe:

c'est de convertir en chaone de caractère puis de l'affiché mais comment?

Eh ben on remarqu'en divisant le nombre par dix on peut extraire nombre par nombre que compose ce chiffre !

Exemple:
0
0
1984 =
1984 / 10 = 194 , 4
198 / 10 = 19 , 8
19 / 10 = 1 , 9
1 / 10 = 0 , 1

*ici le zéro marque la fin de la chaine de caractère !

ainsi si on avait placé ce nombre dans un buffer en ajoutant à chaque fois 48 (je crois) on aurait pu avoir le code ASCII de ce chiffre

maintenant à toi de jouer smile
LinuX Powa (:

10

c'est evident que pour afficher une chaine de caracteres a l'ecran il faut afficher les sprites de chaque caracteres !
c'est pas interdit de reflechir quand meme !
avatar
pwet

11

et pour l'histoire de la decomposition faut pas faire le truc de paradize avec les virgules : c'est n'importe koi !
faut utiliser les modulos !

1984 = 198 * 10 + 4
198 = 19 * 10 + 8
19 = 1 * 10 + 9
1 = 0 * 10 + 1
on s'arrete !
avatar
pwet

12

Ben nan Bill Bob c'est clair roll
j'ai juste voulu dire que le principe c'est ça extraire nombre par nombre et ensuite ajouté 48 ou 49 je m'en souviens plus puis de mettre dans un buffer at faire pointé DrawStrXY sur le buffer pour pouvoir affiché ce nombre roll
LinuX Powa (:

13

decomp (int nb, int size, char* buffer)
{
  int I;
  for (I= size-1; I>=0; I--) {
    buffer[I]= '0'+ nb%10;
    nb/=10;
  }
  buffer[size]= 0;
}

char buffer[5];
decomp (745, 4, buffer);
//on a buffer == "0745"

14

 include "OS.h"
 xdef _nostub ;pas besoin de kernel
 xdef _ti89
 xdef _ti92plus
 move.l a4,-(a7) ;sauvegarde le registre a4 sur la pile
                 ;Les registres d0-d2/a0-a1 ne doivent pas être sauvegardés, mais peuvent être détruits par les ROM calls.
                 ;Pour d3-d7/a2-a6, c'est l'inverse.
 move.w #234,d0
 move.w #23,d1
 add.w d0,d1
 move.w d1,-(a7) ;nombre
 pea format(pc) ;format
 pea buffer(pc) ;buffer
 move.l $c8,a4 ;table des ROM calls en a4
 move.l sprintf*4(a4),a0 ;adresse de [url=http://tigcc.ticalc.org/doc/stdio.html#sprintf]sprintf[/url]
 jsr (a0) ;appel de sprintf
 addq.l #8,a7 ;adjuste la pile
 move.w #1,(a7) ;Attr = A_NORMAL
 pea.l buffer(PC) ;Il faut remettre str sur la pile car sprintf modifie l'adresse.
 clr.l -(a7) ;x = y = 0
 move.l DrawStr*4(a4),a0 ;adresse de [url=http://tigcc.ticalc.org/doc/graph.html#DrawStr]DrawStr[/url]
 jsr (a0) ;appel de DrawStr
 lea.l 10(a7),a7 ;nettoyage de la pile
 move.l (a7)+,a4 ;restaure le registre a4
 rts ;retour à AMS
format: dc.b '%hd',0 ;%hd = word signé, le 0 termine la chaîne de caractères en C (AMS est écrit en C)
buffer: ds.b 7 ;Place pour -32768 (word signé le plus long) + un 0 pour terminer la chaîne de caractères
 END

[edit]Edité par Kevin Kofler le 14-07-2001 à 23:39:14[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

15

Evidement, c'est du nostub mais c'est a peu pres la meme chose que ce que j'ai mis plus haut (en doors) roll

16

N'utilisez pas sprintf dans la boucle principale d'un programme qui demande bcp de rapidite, c'est ultra lent !
Site personnel
Site professionnel

msn / mail : racine.f(at)free.fr

17

>Dark Angel: Evidement, c'est du nostub mais c'est a peu pres la meme chose que ce que j'ai mis plus haut (en doors) roll

Par rapport à ce que tu as mis, j'ai aussi ajouté l'appel à DrawStr et des commentaires pour expliquer ce que je fais. (J'ai même mis des liens vers la documentation de TIGCC pour les ROM calls.)
[edit]Edité par Kevin Kofler le 12-07-2001 à 19:02:03[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

18

Bill Bob> c'est ce que j'avais marque !
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

19

Comme chacun y va de sa petite routine ben moi aussi je vais donner ma mienne a moi smile
	move.l		#ton_nombre_a_afficher,d0
	moveq		#le_nombre_de_digit_a_utiliser,d1
numtostr:
	lea		buffer(pc),a0
	adda		d1,a0
	clr.b		(a0)
	subq.b		#1,d1
loop_numtostr:
	divu		#10,d0
	move.l		d0,d2
	swap		d2
	addi.b		#48,d2
	move.b		d2,-(a0)
	andi.l		#$0000FFFF,d0
	dbf.b		d1,loop_numtostr
;**********************
; DATA
;**********************
buffer:			ds.b	7


Donc on met dans d1.w le nombre a afficher et dans d0.l le nombre de digit a afficher smile

par exemple :
d0.l = 6 et d1.l=123
ca creer la chaine "000123",0 dans buffer

il faut : 0<=d0<=6
et 0<=d1<=655359
avatar
pwet

20

st ce que c'est que ces histoires de dieuQu'e kevin n'employons point de blasfèeme ! Il existe qu'un seul DIEU !
LinuX Powa (:

21

Ce n'est pas moi qui utilise ce terme pour parler de moi!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

donc pour revenir au sujet du topic une fois que le bout de mon code executer on peut afficher la variable buffer avec par exemple DrawStrXY smile
avatar
pwet

23

Idem pour ma routine en C tongue

24

ben en fait c un peu le meme algo qu'on a tous les deux smile
avatar
pwet

25

Arf, il doit pas y avoir 36 facons de le faire wink

26

En effet, dbf.b n'existe pas. C'est à cause de sources comme celles-ci que je ne vais pas passer mon temps à corriger le(s) bogue(s) d'A68k qui permet(tent) de telles instructions.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

27

>> andi.l #$0000FFFF,d0
>tu peux utiliser ext.l si le nombre à afficher est inférieur à 327689 (au lieu de 655359 autrement), ça va 4x plus vite et c 3x plus petit

Tu peut meme supprimer cette instruction, il me semble (divu trvaille sue des words, meme si tu ne l'as pas precisé)

28

est ce que je peu mettre toutes vos routines sur mon site ?
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

29

oui.
swap est-il plus rapide que ext.l ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

30

[Pollux]> autant pour moi ... heuresement que je fais plus de C que d'asm wink