1

voilà, je commence un peu l'asm 68k et j'aimerais que vous commentiez mon premier programme.
Une partie viens du tuto de squale et une autre du topic sur les debuts de orion_ (d'ailleurs quand on voit ce qu'il fait aujourd'hui !).

Voici le code :
section ".data" 
 include "OS.h"

 xdef _nostub
 xdef _ti89
  
_main:
	link 		a6,#0 
	move.l 		$c8,a5
	
	;sauvegarde l'ecran
	pea.l 		3840
	move.l 		HeapAllocPtr*4(a5),a0
	jsr 		(a0)
	move.l 		a0,d4
	tst.l 		d4
	beq 		nomem
	move.l 		#3840,(a7)
	pea.l 		LCD_MEM
	move.l 		d4,-(a7)
	move.l 		memcpy*4(a5),a0
	jsr 		(a0)
	
	;affiche "Hello, World!" en 30,0
	move.w		#4,-(a7)
	pea.l		string(pc)
	move.w		#0,-(a7)
	move.w		#30,-(a7)
	move.l		DrawStr*4(a5),a0
	jsr 		(a0)
	
	;attend qu'on appuie sur une touche
	move.l		ngetchx*4(a5),a0
	jsr		(a0)
	
	;restore l'ecran
	pea.l 		3840
	move.l 		d4,-(a7)
	pea.l 		LCD_MEM
	move.l 		memcpy*4(a5),a0
	jsr 		(a0)
	move.l 		d4,(a7)
	move.l 		HeapFreePtr*4(a5),a0
	jsr 		(a0)
	nomem:
	unlk 		a6
	rts
	
string: dc.b "Hello, World!",0
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

2

faudrait que je trouve le temps de re-bosser sur ce tutorial, d'ailleurs, parce qu'il n'est malheureusement pas vraiment avancé sad
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3

-

4

section ".data" ; ça sert à rien smile
include "OS.h"

xdef _nostub
xdef _ti89

_main:
link a6,#0 ; tu te sers de a6 ? confus les link, c'est surtout utilisé par les programmes C
move.l $c8,a5 ; argh tu changes a5 avant de l'avoir sauvé. çay très MAAAAL
;de façon général, quand tu commences un programmes, fait movem.l a0-a6/d0-d7,-(a7) juste après le _main
; et movem.l (a7)+,a0-a6/d0-d7 en quittant. Quand t'as fini le prog, tu peux supprimer de la liste les registres dont tu te sers pas

;sauvegarde l'ecran
pea.l 3840; met sous forme de constante genre LCD_SIZE, c'est plus propre (même si ça donne la même chose)
move.l HeapAllocPtr*4(a5),a0
jsr (a0)
;il manque addq.l #4,a7
move.l a0,d4
tst.l d4 ; le tst.l est inutile, le move.l a0,d4 s'en charge pour toi
beq nomem
move.l #3840,(a7)
pea.l LCD_MEM ; c'est déjà mieux smile
move.l d4,-(a7)
move.l memcpy*4(a5),a0 ; tu peux faire la boucle directement en asm
jsr (a0)
;lea 12(a7),a7

;affiche "Hello, World!" en 30,0
move.w #4,-(a7)
pea.l string(pc)
move.w #0,-(a7)
move.w #30,-(a7)
move.l DrawStr*4(a5),a0
jsr (a0)
;lea 10(a7),a7
;attend qu'on appuie sur une touche
move.l ngetchx*4(a5),a0
jsr (a0)

;restore l'ecran
pea.l 3840
move.l d4,-(a7)
pea.l LCD_MEM
move.l memcpy*4(a5),a0
jsr (a0)
;lea 12(a7),a7
move.l d4,(a7)
move.l HeapFreePtr*4(a5),a0
jsr (a0)
;addq.l #4,a7
nomem:
unlk a6 ;ça sert à rien
rts
string: dc.b "Hello, World!",0
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

5

-

6

moui, j'avais pas vu ça comme ça
cheeky
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

7

section ".data" ; ça sert à rien

Mais sans ca, TIGCC refuse de compiler !

Quand au link, je depilais tout le long du prog et j'ai vu cette solution alors j'ai essayé.
Sinon, pour la sauvegarde des registres j'y penserais maintenant !
Et merci pour la macro, je savais pas comment on faisait !

squale92>En tout cas pour l'instant il est très compréhensible ton tuto smile
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

8

squale92>En tout cas pour l'instant il est très compréhensible ton tuto

merci smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

9

10

Quand au link, je depilais tout le long du prog et j'ai vu cette solution alors j'ai essayé.
Sinon, pour la sauvegarde des registres j'y penserais maintenant !
Et merci pour la macro, je savais pas comment on faisait !

oué mais ça sert à rien de bouffer un registre pour faire juste ça
autant faire :
move.l a7,backup_a7
au début de ton programme et
move.l backup_a7,a7

à la fin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

11

12

bof pas tant que ça, tant que tu fais pas de bsr/rts entre temps
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

13

pour le
section ".data" ;
c'est bon, ca compile sans. (en fait c'etait juste une histoire d'espace avant le include)

Flanker> ok, on verra quand j'aurais besoin de registres !
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

14

Flanker
:
Quand au link, je depilais tout le long du prog et j'ai vu cette solution alors j'ai essayé.
Sinon, pour la sauvegarde des registres j'y penserais maintenant !
Et merci pour la macro, je savais pas comment on faisait !

oué mais ça sert à rien de bouffer un registre pour faire juste ça
autant faire :
move.l a7,backup_a7
au début de ton programme et
move.l backup_a7,a7

à la fin

mais c'est plus gros ^^ le plus efficace reste, et de loin, de restaurer la pile avec un lea tout à la fin, mais encore faut-il savoir compter hehe

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

15

oué, et si tu fais des branchements, ça peut foutre le bordel
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

16

çayrtes, mais si y en a pas 50000 ça peut être plus efficace de faire un addq/lea à la fin de chaque... link+unlk est tellement lent que c'est souvent mieux ^^

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

17

le gros pb, c'est que link bouffe un registre
sinon, moi aussi j'essai de faire un seul lea à la fin de mes appels smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

18

ben le fait de bouffer un registre, c'est pas vraiment un pb... (à moins que a6 soit un paramètre de ta fonction)
sachant que tu vas de toute façon devoir sauvegarder et restaurer son contenu si tu veux t'en servir, ça ne change rien par rapport au cas où tu te limites à lea... le pb se situe plutôt au niveau vitesse, puisque link+unlk sont très lentes [lire le #0, sauvegarder a6, restaurer a6...]

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

19

L'utilisation la plus intelligente de a6, quand on programme en assembleur pur, me paraît être "global register variable", pointeur vers les données internes du programme, d'autant plus que ça peut permettre de se passer de variables locales sur la pile.
Il me semble d'ailleurs que c'est ce que Matthieu fait dans CS.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

20

oui et je pense aussi que c'est la meilleure utlisation smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

21

Arg, j'arrive pas à faire une boucle, je comprends pas tout...
Est ce que vous pourriez m'expliquer comment traduire cette boucle en asm :
for (i=20 ; i<81 ; i+=10) DrawLine (i, 40, i, 80, A_NORMAL);
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

22

 moveq.l #20,d0
 move.l ($C8).w,a0
 move.l 4*DrawLine(a0),a0
for:
  move.w  #1,-(a7)
  move.w  #80,-(a7)  ; peut s'optimiser en move.l #80<<16 + 1,-(a7)
  move.w  d0,-(a7)
  move.w  #40,-(a7)
  move.w  d0,-(a7)
  jsr     (a0)
  lea.l   10(a7),a7
  addq.w  #1,d0
  cmp.w   #81,d0
  blt.s   for
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

23

Une autre question :
Comment marche le debugger de VTI ?

Sasume>J'ai le droit à adresse error !
Ou voit on que l'on va de 10 en 10 dans ce code ?
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

24

 movem.l d3/a2,-(a7)
 moveq #20,d3
 move.l ($C8).w,a2
 move.l 4*DrawLine(a0),a2
  move.w  #1,-(a7)
  move.w  #80,-(a7)  ; peut s'optimiser en move.l #80<<16 + 1,-(a7)
  move.w  d0,-(a7)
  move.w  #40,-(a7)
  move.w  d0,-(a7)
\for:
 move.w  d3,(a7)
 move.w  d3,4(a7)
  jsr     (a2)
  addq.w  #5,d3
  addq.w  #5,d3
  cmp.w   #81,d3
  blt.s   \for
 lea    10(a7),a7
 movem.l (a7)+,d3/a2

merci Nerick smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

25

movea.l 4*DrawLine(a0),a2 plutot smile
et pourquoi addq.w #5,d3 (x2) au lieu de addi.w #10,d3?

26

de mémoire il me semble que c'est un poil plus rapide (mais je peux me tromper, j'ai jamais trop fait gaffe aux optim vitesse)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

27

movem.l d3/a2,-(a7) 
	moveq #20,d3 
	move.l ($C8).w,a2 
	movea.l 4*DrawLine(a2),a2 
	move.w  #1,-(a7) 
	move.w  #80,-(a7)  ; peut s'optimiser en move.l #80<<16 + 1,-(a7) 
	move.w  d3,-(a7) 
	move.w  #32,-(a7) 
	move.w  d3,-(a7) 
		
\for: 
	move.w		d3,(a7) 
	move.w		d3,4(a7) 
	jsr		(a2) 
	addi.w		#10,d3
	cmp.w		#91,d3 
	blt.s		\for 
	lea		10(a7),a7	
	move.w		#1,-(a7)
	move.w		#80,-(a7) ; peut s'optimiser en move.l #80<<16 + 1,-(a7) 
	move.w		#90,-(a7)
	move.w		#80,-(a7) ; peut s'optimiser en move.l #80<<16 + 90,-(a7) 
	move.w		#20,-(a7)
	jsr		(a2)
	movem.l (a7)+,d3/a2 


VOilà ce que je fais pour afficher mon plateau (de puissance4), ca vous parrait correct ?
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

28

tu dépiles où ce que tu empiles à la fin ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

29

nul part, je depile à la fin.
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

30

c'est dangereux, tu finiras par oublier de dépiler des trucs
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant