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 ?

31

Euh, pour ces routines, pourrions-nous avoir une permission explicite de les mettre sous la licence de TIGCCLIB (GPL + exception libgcc/TIGCCLIB) s'il vous plaît? (Je m'adresse aux auteurs, donc surtout jackiechan et aussi Pollux si c'est possible.) Juste pour qu'il n'y ait pas de conflits à ce sujet plus tard.
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é

32

Bien sûr.

33

Merci jackichan, je vais désormais prendre la tienne, en ajoutant les droits dans mes programmes
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

34

Rajoutes-y les optimisations de Pollux quand même, parce que sinon, elle ne vaut pas grand chose...

35

jackiechan> ok j'y penserais


Voici un header .TEXT (doncc pour TIOS) pas très compliqué à réaliser, mais qui pourra s'avérer très utile ... mon header quasi-définitif pour les dialogues !oui
(il est loin d'etre optimisé, ce qu je ne connais pas trop encore)

...And afterall... AS and NOSTUB powwweeeerrrr!!!

1) le fichier "dialogue"
-------------------------

;----------------------------------
; DialogAddPulldown non testée (mais devrait fonctionner)
,----------------------------------

NOCALLBACK
move.w #1,d0
rts

DialogNewSimple:
move.l a0,-(a7)
movea a7,a0
pea NOCALLBACK
move.w 10(a0),-(a7)
move.w 8(a0),-(a7)
jsr DialogNew
lea 8(a7),a7
move.l (a7)+,a0
rts

DialogAddTitle:
move.l a0,-(a7)
movea a7,a0
move.w 16(a0),-(a7)
move.w 14(a0),-(a7)
move.w 10(a0),-(a7)
move.w #8,-(a7)
move.w #0,-(a7)
move.w #0,-(a7)
move.w #0,-(a7)
move.w 8(a0),-(a7)
jsr DialogAdd
lea 18(a7),a7
move.l (a7)+,a0
rts

DialogAddRequest:
move.l a0,-(a7)
movea a7,a0
move.w 22(a0),-(a7)
move.w 20(a0),-(a7)
move.w 18(a0),-(a7)
move.w 14(a0),-(a7)
move.w #2,-(a7)
move.w 12(a0),-(a7)
move.w 10(a0),-(a7)
move.w #0,-(a7)
move.w 8(a0),-(a7)
jsr DialogAdd
lea 20(a7),a7
move.l (a7)+,a0
rts

DialogAddText:
move.l a0,-(a7)
movea a7,a0
move.l 14(a0),-(a7)
move.w #7,-(a7)
move.w 12(a0),-(a7)
move.w 10(a0),-(a7)
move.w #0,-(a7)
move.w 8(a0),-(a7)
jsr DialogAdd
lea 14(a7),a7
move.l (a7)+,a0
rts

DialogAddPulldown:
move.l a0,-(a7)
movea a7,a0
move.w 20(a0),-(a7)
move.w 18(a0),-(a7)
move.w 14(a0),-(a7)
move.w #14,-(a7)
move.w 12(a0),-(a7)
move.w 10(a0),-(a7)
move.w #2,-(a7)
move.w 8(a0),-(a7)
jsr DialogAdd
lea 18(a7),a7
move.l (a7)+,a0
rts

2) utilisation
---------------------

comme pour tigcc
voici un programme d'exemple:

bra main
include "ams_c"
include "dialogue"
include "atoi"

main:

;-----------------------------
;d4=DialogNewSimple(120,70);
;------------------------------
move.w #70,-(a7)
move.w #120,-(a7)
bsr DialogNewSimple
lea 4(a7),a7
move.w d0,d4
;---------------------------------
; DialogAddTitle(d4,"titre", 0, 1);
;---------------------------------
move.w #1,-(a7)
move.w #0,-(a7)
pea title
move.w d4,-(a7)
bsr DialogAddTitle
lea 10(a7),a7

;-------------------------------
; DialogAddRequest(d4, 20, 20, "c est bien", 0, 15, 20);
;--------------------------------
move.w #0,-(a7)
pea reqtitle
move.w #20,-(a7)
move.w #20,-(a7)
move.w d4,-(a7)
bsr DialogAddRequest
lea 16(a7),a7

;----------------------------
; DialogAddText( d4, 10, 20, "simple texte");
;---------------------------

pea mytext
move.w #20,-(a7)
move.w #10,-(a7)
move.w d4,-(a7)
bsr DialogAddText
lea 10(a7),a7

;--------------------------------------
; DialogDo( d4, CENTER, CENTER, buffer, NULL);
;--------------------------------------
pea 0
pea buffer
move.w #-1,-(a7)
move.w #-1,-(a7)
move.w d4,-(a7)
jsr DialogDo
lea 14(a7),a7

;-----------------------------
; HeapFree(d4);
;----------------------------
move.w d4,-(a7)
jsr HeapFree
lea 2(a7),a7

;-------------------------
; d0=atoi(buffer);
;------------------------
pea buffer
bsr atoi
lea 4(a7),a7

lsl.w #1,d0 ; d0=d0*2

;----------------------
; sprintf( chaine, "valeur*2: %d",d0);
;-------------------------
move.w d0,-(a7)
pea format
pea chaine
jsr sprintf
lea 10(a7),a7

;---------------------------------
; DlgMessage("",chaine, 0, 1);
;---------------------------------
pea $00000001
pea chaine
pea title
jsr DlgMessage
lea 12(a7),a7

;----------------------
;terminer le programme
;-------------------------

rts

chaine: ds.b 20
buffer: ds.b 20
format: dc.b 'valeur*2: %d',0
even
mytext: dc.b 'simple texte',0
even
title: dc.b 'titre',0
even
reqtitle: dc.b 'c est bien',0
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

36

> Dans ton code, je ne comprends pas pourquoi tu n'as rien entre le subi.b #'0',d2 et le cmpi.b #9,d2
Parce que ça ne sert à rien smile Je fais une comparaison non signée.

> Je me trompe encore peut-être, mais je ne comprends pas pourquoi tu mets un bne au lieu d'un beq là
euh oui pardon g pas changé ça dans le copier-coller. Erreur corrigée

> Mais au fait, il me smeblait que pour GTC tu avais réécrit une partie de TIGCCLIB en ASM.
Non non c faux smile (les rumeurs ont la vie dure)
Je trouve que le rapport utilité/temps est assez faible embarrassed


Donc voilà la version corrigée, qui fait atoi et atol :
atoi:
atol:
	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:
	moveq	#0,d2
	move.b	(a0)+,d2
	subi.b	#'0',d2
	cmpi.b	#9,d2
	bhi.s	Result
	add.l	d0,d0
	move.l	d0,d1
	lsl.l	#2,d0
	add.l	d1,d0
	add.l	d2,d0
	bra.s	Suite
Result:
	move.l	a1,d1
	bne.s	EndAtoi
	neg.l	d0
EndAtoi:
	rts

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

37

Pollux a écrit :
> Dans ton code, je ne comprends pas pourquoi tu n'as rien entre le subi.b #'0',d2 et le cmpi.b #9,d2
Parce que ça ne sert à rien smile Je fais une comparaison non signée.
Ah OK. C'est vraiment pas bête comme optimisation top
J'ai eu beau chercher dans toutes les docs que j'avais sous la main, nulle part il n'était précisé que la comparaison s'effectuait en arithmétique non signée.

38

oups j'avais pas vu la deuxième page smile
Euh, pour ces routines, pourrions-nous avoir une permission explicite de les mettre sous la licence de TIGCCLIB (GPL + exception libgcc/TIGCCLIB) s'il vous plaît? (Je m'adresse aux auteurs, donc surtout jackiechan et aussi Pollux si c'est possible.) Juste pour qu'il n'y ait pas de conflits à ce sujet plus tard.

Pas de problème, et comme je me doute que tu vas me demander de reformuler pour qu'il n'y ait absolument aucun problème : tu as la permission explicite de la mettre sous la licence de TIGCCLIB (GPL + exception libgcc/TIGCCLIB)
J'ai eu beau chercher dans toutes les docs que j'avais sous la main, nulle part il n'était précisé que la comparaison s'effectuait en arithmétique non signée.

Pas pour toutes les instructions. Comparaison signée : bgt/bge/blt/ble, comparaison non signée : bhi/bcs/bcc/bls.

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

39

Encore 8 octets de moins tongue (mais je pense que j'aurais du mal a faire mieux wink)

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

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

40

Pollux a écrit :
Encore 8 octets de moins tongue (mais je pense que j'aurais du mal a faire mieux wink)
Je ne comprends pas pourquoi il y a un add.b d2,d2 juste avant le bne.s Suite confus
Et j'ai l'impression que ton code ne marchera pas avec le - du tibasic.

41

Je ne comprends pas pourquoi il y a un add.b d2,d2 juste avant le bne.s Suite Et j'ai l'impression que ton code ne marchera pas avec le - du tibasic.

C'est là l'intérêt du add.b d2,d2 : je viens de me rendre compte que '(-)' = '-' + 128 smile

Au fait encore 2 octets de moins smile

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


mais je ne vois plus trop où je pourrais gagner de la place (même avec du code auto-modifiant, les opcodes add et sub sont trop éloignés sad)

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

42

Pollux a écrit :
C'est là l'intérêt du add.b d2,d2 : je viens de me rendre compte que '(-)' = '-' + 128 smile


Tu peux etre plus clair?confus
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

43

> Tu peux etre plus clair?
Ca veut dire que pour le '-' ASCII, (a0)='-', et pour le '(-)' TI, (a0)='-'+128
Par conséquent avant le add.b d2,d2, d2=0 ou d2=128, et après le add.b d2,d2, d2 sera nul si et seulement si d2 était égal à 0 ou à 128, c'est à dire si et seulement si le caractère était un '-' (ascii ou TI)

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

44

Ok, j'ai compris
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