1

Je suis en train de travailler sur le fichier Dialog.h, ppour essayer d'adapter les fonctions les plus intéressantes sur AS.

J'ai réussié une première boite de dialogue, mais je ne sais pas pourquoi, le titre et le boutons ne s'affichent pas:

include "ams_c"
pea NOCALLBACK
move.w #70,-(a7)
move.w #120,-(a7)
jsr DialogNew
lea 8(a7),a7
move.w d0,d4

move.w #1,-(a7)
move.w #0,-(a7)
pea title
move.w #8,-(a7)
move.w #0,-(a7)
move.w #0,-(a7)
move.w #0,-(a7)
move.w d4,-(a7)
jsr DialogAdd
adda #18,a7 ; Histoire de reprendre les bonnes habitudes grin

pea mytext
move.w #7,-(a7)
move.w #20,-(a7)
move.w #10,-(a7)
move.w #0,-(a7)
move.w d4,-(a7)
jsr DialogAdd
adda #14,a7

;----voici LE appel
pea 0
pea 0
move.w #-1,-(a7) ; CENTER of Y
move.w #-1,-(a7) ; CENTER of .... vous avez deviné!
move.w d4,-(a7)
jsr DialogDo
adda #14,a7

move.w d4,-(a7)
jsr HeapFree
adda #2,a7

rts

NOCALLBACK:
(rajouté après le post #6) move.w #1,d0
rts
mytext: dc.b 'Simple texte',0
even
title: dc.b 'Titre',0

Si par hasard quelqu'un aime programmer sous AS() ... est ce qu'il peut m'aider?
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

2

Vérifie dans la doc de TIGCC que tu passes bien les paramètres qu'il faut. En tout cas, en lisant ton code, je n'ai pas vu d'erreur de code, donc ça vient probablement d'une mauvaise utilisation des ROM_CALLs.

3

Non je confirme,pas de bug pas d'erreur en compilation,le seulproblèmevient du titre qui ne s'affiche pas,comme je l'ai dit.Par contre, pour les parametres, il y un unknown, et seul le fichier de tigcc, que je ne peux pas regarder maintenant, me pourra renseigner sur la valeur sinon.
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

4

C'est bien 0 qu'il faut passer dans "unknown", donc le problème n'est pas là.
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é

5

NOCALLBACK doit renvoyer 0, non ?

6

Oui, normalement NoCallBack doit renvoyer 0 (moveq #0,d0).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

7

Non j'ai trouvé, justement, NOCALBACK doit renvoyer 1 (format word),ALors la surprise! Tout fonctionne comme avec TIGCC!

(TIGCC:
short NoCallBack(short x, long y)
{
return 1;
}
)

Le seul problème, c'est que je n'ai pas encore réussi à adapter les redondances en routines adaptées comme AddRequest,...
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

8

C'est un plaisir de proposer les adaptations que j'ai pu faire, ici il s'agit de la fonction atoi : convertir une chaine contenu un short en ce short lui meme (ne modifie pas la chaine). le résultat est contenu dans d3. Mais elle juste présentée sous forme de programme, et non sous forme de routine (encore une habitude que j'aurais à prendre... finir mes fonctions) . J'ai écrit cette fonction parcequ'elle sera tres utile pour la récupération de valeurs passées dans une boite de dialogue.

include "ams_c"
movem.l d0-d7/a0-a6,-(a7)
move.l #num,a3
clr.w d3

loop: ;fonction atoi
move.b (a3),d0
beq endloop
move.l #1,-(a7)
pea zero
move.l a3,-(a7)
jsr strncmp
lea 12(a7),a7
mulu #10,d0
add.w d0,d3
add.l #1,a3
bra loop
endloop:

move.w d3,-(a7)
pea format
pea chaine
jsr sprintf
lea 10(a7),a7

pea $00000001
pea chaine
pea titre
jsr DlgMessage
lea 12(a7),a7

movem.l (a7)+,d0-d7/a0-a6
rts
chaine: ds.b 20
zero: dc.b '0',0
even
num: dcb '32025',0
even
format: dc.b 'ecart: %d',0
even
titre: dc.b 'fonction',0

------------------------------------------------

*num est votre variable numérique à configurer
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

9

C'est bien, mais j'ai quelques reproches à faire :
Bon, déja, ce serait plus pratique que ta fonction s'utilise comme une fonction classique, c'est-à-dire en passant un argument à la fonction.
Tu peux soit utiliser un registre pour passer l'argument (a3 par exemple), ou bien la pile.

Ensuite, ta fonction n'est pas du tout compatible avec celle de TIGCCLIB, tu ferais mieux de le préciser. Et puis je pense qu'elle retournera n'importe quoi comme nombre si on met une chaine qui ne contient aussi des lettres, et elle ne fonctionne pas avec les nombres négatifs.

Et puis il y a pas mal d'optimisations à faire aussi smile
Par exemple, ton appel à strncmp pour comparer un seul caractère, c'est un peu abusé...

10

Enfin, je reconnais que l'ai faite un peu trop vite. Je ferais des efforts pour la pile ou le registre, et pour le nombre de caractères lus. Par contre, la fct strncmp m'avait semblée la meilleure.
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

11

Il suffit d'une simple soustraction... roll (à la place de strncmp)

12

J'avais déja essayé, mais j'obtenais n'importe quoi
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

13

Tiens, tu m'as donné envie de faire un atoi en assembleur love
Le voici, et totalement compatible avec celui de TIGCCLIB smile
atoi:

	moveq.l	#0,d0	; Result
	moveq.l	#0,d1	; Sign

	cmpi.b	#' ',(a0)
	beq.s	SkipSpace

Sign:
	move.b	(a0),d2
	cmpi.b	#'-',d2
	beq.s	Minus
	cmpi.b	#$AD,d2
	bne.s	Plus
Minus:
	addq.w	#1,a0
	moveq.l	#-1,d1
	bra.s	Suite

Plus:
	cmpi.b	#'+',d2
	bne.s	Suite
	addq.w	#1,a0

Suite:
	move.b	(a0)+,d2
	beq.s	Result

	cmpi.b	#'0',d2
	blt.s	Result
	cmpi.b	#'9',d2
	bgt.s	Result

	mulu.w	#10,d0
	subi.b	#'0',d2
	ext.w	d2
	add.w	d2,d0
	bra.s	Suite

Result:
	tst.w	d1
	bpl.s	EndAtoi
	neg.w	d0

EndAtoi:
	rts
	

SkipSpace:
	cmpi.b	#' ',(a0)+
	beq.s	SkipSpace
	subq.w	#1,a0
	bra.s	Sign
D'aileurs, si la TIGCCTEAM veut l'intégrer à TIGCCLIB, il n'y a pas de problème.

14

toi: rts SkipSpace: cmpi.b #' ',(a0)+ beq.s SkipSpace subq.w #1,a0 bra.s Sign
Tiens, je viens de penser à une optimisation vitesse (la taille sera augmentée de 4 octets) :atoi:

	moveq.l	#0,d0	; Result
	moveq.l	#0,d1	; Sign

	cmpi.b	#' ',(a0)
	beq.s	SkipSpace

Sign:
	move.b	(a0),d2
	cmpi.b	#'-',d2
	beq.s	Minus
	cmpi.b	#$AD,d2
	bne.s	Plus
Minus:
	addq.w	#1,a0
	moveq.l	#-1,d1
	bra.s	Suite

Plus:
	cmpi.b	#'+',d2
	bne.s	Suite
	addq.w	#1,a0

Suite:
	move.b	(a0)+,d2
	beq.s	Result

	cmpi.b	#'0',d2
	blt.s	Result
	cmpi.b	#'9',d2
	bgt.s	Result

	move.w	d0,d1
	add.w	d0,d0
	add.w	d0,d0
	add.w	d1,d0
	add.w	d0,d0
	subi.b	#'0',d2
	ext.w	d2
	add.w	d2,d0
	bra.s	Suite

Result:
	tst.l	d1
	bpl.s	EndAtoi
	neg.w	d0

EndA
Cette fonction semble faire 92 octets et la précédente semble en faire 88. La fonction actuelle de TIGCCLIB semble faire 128 octets !

15

jackiechan
a écrit : Tiens, je viens de penser à une optimisation vitesse (la taille sera augmentée de 4 octets)

Non, merci. smile Si on prend une de tes routines, ce sera l'autre. smile
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é

16

Vraiment ? Pour 4 octets ! Et pourtant le gain doit être proche de 2 à mon avis : mulu.w #10,d0 -> 46 cycles tandis que toute ma série de move/add ne prend que 20 cycles !

17

Bon, vous en prenez une ou pas ? grin

18

Il faudra que je propose les routines à Sebastian. Les décisions au sujet de TIGCCLIB ne se font pas si vite que ça. smile
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é

19

... surtout que tu peux gagner encore pas mal de place (SkipSpace...) et tu peux encore gagner qqs octets avec >='0' / <='9'

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

Bon, mail envoyé à Sebastian et Zeljko, j'attends la réponse de Sebastian (et peut-être aussi de Zeljko).
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é

21

dès le début) :SkipSpace: cmpi.b #' ',(a0)+ beq.s SkipSpace subq.w #1,a0Pour le SkipSpace, je pourrais faire un truc comme ça en fait (Je ne vois pas comment gagner plus de place ici (ça fait descendre la fonction à 80 octets)...
Et pour les tests pour savoir si le caractère est bien un chiffre, je ne vois pas trop comment gagner de la place sad
Tu penses faire comment, toi ?

22

Ah, je viens de penser à une autre optimisation :
Au lieu de faire un cmpi.b #'0',d2 puis un subi.b #'0',d2 autant faire seulement le subi smile
On gagne encore 4 octets, ce qui nous ramène à une fonction de 76 octets pour la "lente" et 80 pour l'autre.

23

avec qqs optimisations, sans muls mais avec un lsl (+2 cycles, -2 octets...) (au passage, il y a un pb avec ta deuxième version pour d1, et il y a 6 octets et pas 4 de différence entre les 2 versions) :

atoi:
	moveq.l	#0,d0	; Result
	move.l	a0,a1	; Sign
SkipSpace:
	cmpi.b	#' ',(a0)+
	beq.s	SkipSpace
Sign:
	move.b	-(a0),d2
	cmpi.b	#'+',d2
	bne.s	Passer_et_Suite
	cmpi.b	#'-',d2
	beq.s	Minus
	cmpi.b	#$AD,d2
	bne.s	Suite
Minus:
	sub.l	a1,a1
Passer_et_Suite:
	addq.w	#1,a0
Suite:
	move.b	(a0)+,d2
	subi.b	#'0',d2
	cmpi.b	#9,d2
	bhi.s	Result
	add.w	d0,d0
	move.w	d0,d1
	lsl.w	#2,d0
	add.w	d1,d0
	ext.w	d2
	add.w	d2,d0
	bra.s	Suite
Result:
	move.l	a1,d1
	bne.s	EndAtoi
	neg.w	d0
EndAtoi:
	rts

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

Ah, je viens de penser à une autre optimisation : Au lieu de faire un cmpi.b #'0',d2 puis un subi.b #'0',d2 autant faire seulement le subi


oui smile mais malheureusement je ne vois pas comment on peut éviter le subi (avec un moveq) sans re-perdre les 2 octets gagnés après

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

25

Pollux
a écrit : au passage, il y a un pb avec ta deuxième version pour d1
Ah bon ? Comment ça ? Pourtant j'ai testé et ça me semble correct.
et il y a 6 octets et pas 4 de différence entre les 2 versions
C'est ce que je pensais aussi, mais quand j'ai assemblé les différentes versions, TIGCC ne m'a affiché que 4 octets de différence. Mais j'ai l'impression que c'est dû à des raisons d'alignement non ?

Au fait, dans ton code, tu as écrit à un endroit move.b -(a0),d2, je suppose que tu voulais écrire move.b -1(a0),d2

26

> Au fait, dans ton code, tu as écrit à un endroit move.b -(a0),d2, je suppose que tu voulais écrire move.b -1(a0)
Non non. Ca évite le subq.w et les 2 octets pour le -1(a0)

> Ah bon ? Comment ça ? Pourtant j'ai testé et ça me semble correct.
Ah oui pardon autant pour moi. Par contre ca marche plus pour atol tongue
(ma méthode marche aussi pour atol)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

27

Pollux a écrit :
> Au fait, dans ton code, tu as écrit à un endroit move.b -(a0),d2, je suppose que tu voulais écrire move.b -1(a0) Non non. Ca évite le subq.w et les 2 octets pour le -1(a0)
Ah oui, pardon ! Dans ma tête, j'avais oublié que l'adressage prédécrémenté existait...
> Ah bon ? Comment ça ? Pourtant j'ai testé et ça me semble correct.
Ah oui pardon autant pour moi. Par contre ca marche plus pour atol tongue (ma méthode marche aussi pour atol)
Oui, c'est vrai smile

28

Dans ton code, je ne comprends pas pourquoi tu n'as rien entre le subi.b #'0',d2 et le cmpi.b #9,d2 confus

29

Je me trompe encore peut-être, mais je ne comprends pas pourquoi tu mets un bne au lieu d'un beq là : confus
	cmpi.b	#'+',d2
	bne.s	Passer_et_Suite

30

En utilisant tes optimisations, j'arrive à 68 octets.
Mais au fait, il me smeblait que pour GTC tu avais réécrit une partie de TIGCCLIB en ASM. Quel code tu as écrit pour atoi ?