Orion_ a écrit :
un buffer memoireattend, je prend mon bouquin, je vais essayer de comprendre.
pea.l (3840).w ROM_CALL HeapAllocPtr addq.l #4,a7
sinon, pour les operations sur les chaines ?
en fait je voudrais faire un truc comme sa:
chaine := 'Ma chaine....'; For i := 1 to length(chaine) do DrawStr(i*6,1,chaine[ i ]);
pea.l chaine(PC) ROM_CALL strlen addq.l #4,a7 move.w d0,d3 subq.w #1,d3 lea.l chaine(PC),a2 moveq.l #1,d4 loop: move.w #4,-(a7) ;A_NORMAL move.b (a2)+,d0 ext.w d0 ;je pense que ça passe même sans ça, mais on va travailler proprement move.w d0,-(a7) swap d4 addq.w #6,d4 swap d4 move.l d4,-(a7) ROM_CALL DrawChar addq.l #8,a7 dbra.w d3,loop
Orion_ a écrit :
pea.l chaine(PC) ; on "charge" la chaine
ROM_CALL strlen ; regarde sa taille
addq.l #4,a7 ; restore la pile (.L donc 4)
move.w d0,d3 ; on place le resultat dans d3
subq.w #1,d3 ; on retire 1 pour dbra (qui s'arrete a -1)
lea.l chaine(PC),a2 ; on charge la chaine dans a2
moveq.l #1,d4 ; d4=1
loop:
move.w #4,-(a7) ;A_NORMAL
move.b (a2)+,d0 ; ??????
ext.w d0 ; ?????
move.w d0,-(a7) ????
swap d4 ; ???????
addq.w #6,d4 ; on avance de 6 pixel (??)
swap d4 ; ??????
move.l d4,-(a7) ; ???
dbra.w d3,loop ; on loop jusqu'a la fin de la chaine
heu, ou est la fonction DrawChar la dedans ?????
au fait, une fois qu'on a fait:
pea.l (3840).w
ROM_CALL HeapAllocPtr
addq.l #4,a7
on balance nos donnée dans quel reg ??
move.l #1,(a0)+ move.l #2,(a0)+ ...
move.b (a2)+,d0 ;prélève l'octet en (a2) et incrémente a2. En gros: [i]char d0;char *a2;d0=*(a2++);[/i] ext.w d0 ;extend le [i]char[/i] en un [i]short[/i]. En gros: [i]short d0_w;char d0_b;d0_w=d0_b;[/i] move.w d0,-(a7) ;passe le [i]short[/i] sur la pile ;(Tout ça parce qu'un [i]char[/i] doit toujours être promu en [i]short[/i] pour pouvoir le passer sur la pile.) swap d4 ;échange les 2 mots de d4 addq.w #6,d4 ;oui, on avance de 6 pixels swap d4 ;échange les 2 mots de d4. ;(Tout ça pour rajouter 6 au mot de poids fort de d4. On aurait aussi pu mettre: ;[i]addi.l #$60000,d4[/i].) move.l d4,-(a7) ;passe d4 sur la pile. On passe les 2 coordonnées à la fois comme ça.