30

grin
Je parlais du d0-a6 au lieu de d0-d7/a0-a6

31

bah et alors? c pas de moi ça... fin c même pas une question d'"être a qqun"...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

32

dommage, ma premiere conjecture était la bonne sad
j'aurrai préféré qu'il confirme la seconde grin

33

héhé grin

34

roll
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.

35

Voilà un prog qui affiche un sprite 8*8 en nostub (ou pas)
Je viens juste de le faire.

1 seul prob, g une adress error lorsque la coordonnée en X (d1) est impaire

Ma solution :
faire
move.w d5,(a1,d2) avec d2 le res de la div par 8
au lieu de
move.w d5,(a1)

MAIS TIGCC ne comprends pas move.w d5,(a1,d2)
J'ai peut etre fait une connerie ...

Merci Kevin de me répondre wink
; Assembly Source File ; Created 11/05/2002, 20:44:24      include "OS.h" ;fichier include pour les programmes en _nostub, contenant notamment les ROM_CALLs             xdef _nostub ;pas besoin de kernel       xdef _ti89 ;Ce programme tourne sur TI-89.  ;********************************** MACROs ***************************************** ROM_C     MACRO      move.l 1*4(a5),a0        jsr (a0)       ENDM ;****************************** DEBUT DU PROGRAMME *********************************      movem.l     d3-d7/a2-a6,-(sp)  ; un prog a le droit de modifier a0-a1/d0-d2      move.l      $c8,a5    ;table des ROM_CALLs en a5 NE PLUS UTILISER A5 !!            bsr     Screen_Save            ROM_C     ScreenClear            lea      sprite,a0      move.l     #LCD_MEM,a1      move.w     #5,d1     ; Décalage en X      move.w     #1,d2     ; Décalage en Y            bsr     put_sprite_8            ROM_C      ngetchx      bsr     Screen_Load      bra     fin nomem      addq.l #4,a7 ;nettoie la pile fin      movem.l     (sp)+,d3-d7/a2-a6      rts ;********************************  SOUS PROGRAMMES *********************** put_sprite_8:     ; a0 : sprite, a1 : ecran, d1 : X, d2 : Y      moveq     #8-1,d7     ; on boucle 8 fois      tst.b     d2      beq     b_put_sprite_8  ; si Y=0 alors on ne décale pas en Y      subq     #1,d2 decal_Y      add     #30,a1      dbra     d2,decal_Y     ; on décale en Y      divu     #8,d1     ; on divise X par 8      move.w     d1,d2     ; on sauve le resultat dans d2 ;     add.w     d1,a1     ; on positionne X en ajoutant le resultat      clr.w     d1           swap     d1     ; on recupère le reste dans d1 b_put_sprite_8      move.b     (a0)+,d3   ; d3 contient la 1ere ligne      move.b     d3,d4    ; d4 = d3      lsr.b     d1,d3    ; on décale d3 de X vers la droite      move.w     #8,d5      sub.w     d1,d5      ; d5 = 8-X      lsl.b     d5,d4      ; on décale d4 de 8-X vers la gauche           move.b     d3,d5     ; on place d3 dans d5      lsl     #8,d5     ; on décale d5 de 8 vers la gauche      move.b     d4,d5     ; on place d4 dans d5      move.w     d5,(a1)     ; on ecrit d5 à l'écran      add     #30,a1     ; on passe à la ligne      dbra     d7,b_put_sprite_8      rts Screen_Save:      pea.l 3840 ; (240 * 128)      ROM_C     HeapAllocPtr  ; alloue 3840 octets      move.l a0,d4 ;sauvegarde l'adresse du bloc alloué en d4      tst.l d4      beq nomem ;si le pointeur est nul, quitte le programme      move.l     d4,ecran        pea.l 3840 ;taille à copier      pea.l $4c00 ;source: adresse de l'écran      move.l d4,-(a7) ;destination: adresse du bloc alloué        ROM_C     memcpy      lea.l 16(a7),a7 ;nettoie la pile       rts Screen_Load:      pea.l 3840 ;taille à copier      move.l     ecran,d4      move.l      d4,-(a7) ;source: adresse du bloc alloué      pea.l $4c00 ;destination: adresse de l'écran      ROM_C     memcpy      move.l d4,-(a7)      ROM_C     HeapFreePtr ;libère le bloc alloué      lea     16(a7),a7      rts ;***************************************** VARIABLES ************************ ecran:     ds.l     1     ; adresse de l'écran à restaurer sprite:      dc.b %11111111      dc.b %11100111      dc.b %11100111      dc.b %11100111      dc.b %11100111      dc.b %11100111      dc.b %11100111      dc.b %11111111
T3 member
TimeToTeam : A new generation of games for TI

36

heu, c'est 0(a1,d2) technic smile
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

37

Merci Sbibi, je crois que c'est de là d'où venait l'erreur.
J'ai encore confondu avec le X68k où le 0 est facultatif.
T3 member
TimeToTeam : A new generation of games for TI

38

pour eviter une add impaire, tu dive X par le double et tu multiplie par 2...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

39

TiMad : je comprends pas trop ta solution.
Tu veux que je divise X par 16 et que je multiplie ensuite par 2 ?
Qui revient à faire un div X par 8 non ?

Le prob d'adresse impaire ne vient pas de la div mais de l'ajout du reste de la div lorsque ce reste est impair.
T3 member
TimeToTeam : A new generation of games for TI

40

pkoi tu ferais pas un add #1 suivi d'un and?
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

41

Parceque c'est plus lent tongue
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.

42

bah peut être, g pas suivi g juste vu que qqun disait de diviser par le double et de multiplier par le machin, dc décalages... bah ça dépend comment c implémenté smile
si il add ds la mem ou ds un reg, pareil pr le and, si c ds la mem c lent, sinon ds des regs, bah... 8+8 addi et andi...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

43

la technique que j'utilise (peut etre pas la meilleur) est celle si:
Bon je vais juste expliquer le calcule de coordonnées en X:
;d0.w = x
lsr.w #4,d0 ; divise x par 16
add.w d0,d0 ; multiplie x par 2

lsr.w #4,d0 <=> E(x/16) <=> partie entiere de x/16
add.w d0,d0 <=> E(x/16)*2
comme E(x/16) appartient a |N, E(x/16)*2 est forcement paire.
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

44

Cette technique sert que si l'on affiche le sprite avec des long...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

45

heu... v ptet regarder a koi sert la source que Technic a posté... ça pourrait aider grin
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

46

Heuu Timad, j'aime bien ta technique mais je veux pas optimiser ma div par 8 étant donné que je dois récupérer le reste.
Je rappelle rien du tout et ferme ma gueule pour la bonne cause
Sbibi : un add #1 suivi d'un and ... c peut etre ma soluce, explicite mieux stp.
Sinon, ma routine sert juste à afficher un sprite 8*8 wink
Je rappelle mon prob : lorsque j'ajoute le reste de la div par 8 à mon adresse d'écran, si le reste est impair, l'adresse de l'ecran est impaire d'où ADRESS ERROR grin
T3 member
TimeToTeam : A new generation of games for TI

47

bon vala technic, ce que je ferais:
ce n'est pas particulièrement optimisé, mais ça marche smile
dsl si les commentaires sont pas très très lisibles grin ; Assembly Source File ; Created 11/05/2002, 20:44:24       include "OS.h" ;fichier include pour les programmes en _nostub, contenant notamment les ROM_CALLs       xdef _nostub ;pas besoin de kernel       xdef _ti89 ;Ce programme tourne sur TI-89. ;********************************** MACROs ***************************************** ROM_C     MACRO      move.l 1*4(a5),a0       jsr (a0)      ENDM ;****************************** DEBUT DU PROGRAMME *********************************       movem.l     d3-d7/a2-a6,-(sp)  ; un prog a le droit de modifier a0-a1/d0-d2       move.l      $c8,a5    ;table des ROM_CALLs en a5 NE PLUS UTILISER A5 !!       bsr     Screen_Save       ROM_C     ScreenClear       lea      sprite,a0       move.l     #LCD_MEM,a1       move.l     #5,d1     ; Décalage en X       move.l     #1,d2     ; Décalage en Y       bsr     put_sprite_8       ROM_C      ngetchx       bsr     Screen_Load      bra     fin nomem      addq.l #4,a7 ;nettoie la pile fin       movem.l     (sp)+,d3-d7/a2-a6       rts ;********************************  SOUS PROGRAMMES *********************** PutSprite8 macro    moveq.l #0,d4    move.b (a0)+,d4  ;loade la ligne courante du sprite    lsl.w #8,d4      ;|    swap d4          ;|positionne le sprite au début du long    lsr.l d1,d4      ;décale de l'offset X (celui obtenu ac and.l #$f,d1)    or.l d4,1(a1)   ;affiche la ligne courante du sprite  endm put_sprite_8 ;main putsprite function  add.w d2,d2  ;|y*2  move.w d2,d4 ;|  lsl.w #4,d2  ;|y*32  sub.w d4,d2  ;|y*32 - y*2 = y*30  move.w d1,d4  and.l #$f,d1 ;garde l'offset du pixel dans le word le contenant à l'écran  lsr.l #3,d4   ;addr du byte ou se trouve le pixel (depuis le début de la ligne courante)  and.l #$fe,d4 ;addr paire pour pouvoir y mettre un word contenant une ligne entière du sprite: par ex: $00000111 11111000  add.l d2,d4  ;lcdmem+d4=addr du byte ou se trouve le pixel  adda.l d4,a1 ; "    PutSprite8 0   ;y    PutSprite8 30  ;y+1    PutSprite8 60  ;y+2    PutSprite8 90  ;y+3    PutSprite8 120 ;y+4    PutSprite8 150 ;y+5    PutSprite8 180 ;y+6    PutSprite8 210 ;y+7  rts ;***************************************** Screen_Save:      pea.l 3840 ; (240 * 128)      ROM_C     HeapAllocPtr  ; alloue 3840 octets       move.l a0,d4 ;sauvegarde l'adresse du bloc alloué en d4       tst.l d4       beq nomem ;si le pointeur est nul, quitte le programme       move.l     d4,ecran         pea.l 3840 ;taille à copier       pea.l $4c00 ;source: adresse de l'écran       move.l d4,-(a7) ;destination: adresse du bloc alloué         ROM_C     memcpy       lea.l 16(a7),a7 ;nettoie la pile       rts Screen_Load:       pea.l 3840 ;taille à copier       move.l     ecran,d4       move.l      d4,-(a7) ;source: adresse du bloc alloué       pea.l $4c00 ;destination: adresse de l'écran       ROM_C     memcpy       move.l d4,-(a7)       ROM_C     HeapFreePtr ;libère le bloc alloué       lea     16(a7),a7       rts ;***************************************** VARIABLES ************************ ecran:     ds.l     1     ; adresse de l'écran à restaurer sprite:       dc.b %11111111       dc.b %11100111       dc.b %11100111       dc.b %11100111       dc.b %11100111       dc.b %11100111       dc.b %11100111       dc.b %11111111
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

48

TechNIC
a écrit : Heuu Timad, j'aime bien ta technique mais je veux pas optimiser ma div par 8 étant donné que je dois récupérer le reste.

ben si
si d0.w=ton nb à diviser,
move.w d0,d1
lsr.w #3,d0 ; d0 = E(nb/8)
andi.w #7,d1 ; d1 = nb%8 smile

49

[nosmile]Moi j'ai mieux : jsr graphlib:tongueut_sprite smile

50

Moi j'ai encore mieux:
bsr Sprite8
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é

51

C'ést plus rapide avec graphlib:tongueut_sprite (De preos tongue)

52

Pen^2
a écrit : erf et Zguide c quoi pitet ??

DE LA MERDE!!!!
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

53

Tu pourrais t'exprimer plus poliment, mais sinon je suis plus ou moins d'accord. Quand j'ai débuté l'assembleur il y a 2 ans environ, j'avais essayé le ZGuide. Je n'ai strictement rien compris à ce qu'il racontait, donc poubelle. Avec le 92guide de Mathieu Lacage (surtout le 68kguide de Jimmy Mårdell et le newbies.txt que Mathieu Lacage a rajouté), j'ai appris sans trop de problèmes.
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é

54

Miles=>DE LA MERDE!!!!
c pas tres gentil pour zorglop hum
il a pourtant énormément oeuvré pour la communauté embarrassed
Kevin=>je n'ai strictement rien compris
ba c normal, ct pour l'ellite tongue (je plaisante bien sûr ;-);-))



55

TechNIC a écrit :
Heuu Timad, j'aime bien ta technique mais je veux pas optimiser ma div par 8 étant donné que je dois récupérer le reste.
Je rappelle que qd tu divises par 8, le resultat est forcément pair ...
Sbibi : un add #1 suivi d'un and ... c peut etre ma soluce, explicite mieux stp.
Sinon, ma routine sert juste à afficher un sprite 8*8 wink
Je rappelle mon prob : lorsque j'ajoute le reste de la div par 8 à mon adresse d'écran, si le reste est impair, l'adresse de l'ecran est impaire d'où ADRESS ERROR grin


d0.w=24
lsr.w #3,d0 => d0=3 Impair
je vois pas ou est le probleme avec ma technique, ce n'est pas une optimisation, mais permet de se placer tout les 16 pxl pour eviter d'avoir une add error!
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

56

Merci bien Sbibi pour la correction. Je testerais ce soir.

KK : pk ROM_CALL Sprite8 n'existe pas !! wink
T3 member
TimeToTeam : A new generation of games for TI

57

TiMad #54 : étrange que personne (même Kevin eek) n'ai réagit frankie.gif
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.

58

bon j'ai corrigé l'erreur... (j'avais multiplié par 8 au lieu de diviser par 8...roll
Ceci etant dit je trouve ma methode bien plus simple et bien plus rapide...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

59

NAN je disais ça par rapport à ce qu'a dit TechNIC : "Je rappelle que qd tu divises par 8, le resultat est forcément pair .." sick
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.

60

Ben oui : 24/8=3.
C'est pair.