zegoo Le 02/02/2006 à 19:48 Merci M.Flanker de m'avoir remotivé, merci M.Pollux pour lea 12(a7),a7 (j'avais pas compris mais c'est quand meme bizarre...) et merci M;Sasume, en effet le bout code que j'ai fait ne fonctionnait que pour x et y codés sur un byte !!!
En tout cas j'ai fait çà car çà me semblait logique, peut etre n'est-ce pas encore correct mais çà a l'air de marcher:
[pre]
include "OS.h"
xdef _nostub
xdef _ti89
xdef _ti92plus
movem.l d0-d4/a0-a5,-(a7) ; Sauvegarde des registres d0,d4 et a5
move.l $C8,a5 ; on place la table des rom_call dans le registre a5
pea.l 3840 ;taille à allouer
;(même chose que move.l #3840,-(a7), mais plus optimisé)
move.l HeapAllocPtr*4(a5),a0
jsr (a0) ;alloue les 3840 octets
move.l a0,d4 ;sauvegarde l'adresse du bloc alloué en d4
beq nomem ;si le pointeur est nul, quitte le programme
pea.l $4c00 ;source: adresse de l'écran
move.l d4,-(a7) ;destination: adresse du bloc alloué
move.l memcpy*4(a5),a0
jsr (a0) ;sauvegarde l'écran
lea 12(a7),a7 ;nettoyage de la pile
move.l ScreenClear*4(a5),a0 ; on efface l'écran
jsr (a0)
move.l #25,d0
move.l #35,d1
lea croix,a0 ; Il semblerait que le compilateur rajoute le (PC) automatiquement...
move.l #LCD_MEM,a1 ; Mémoire de la vidéo
move.l d1,d2 ; d1 et d2 contiennent la même valeur
lsl.l #5,d1 ; On multiplie d1 par 2^5, soit 32
lsl.l #1,d2 ; On multiplie d2 par 2^1, soit 2
sub d2,d1 ; On soustrait d1*32 et d2*2, en factorisant on a d1*(32-2) d'ou d1*30 !
move.l d0,d2 ; On copie d0 dans d2
lsr #3,d0 ; On divise d0 par 2^3 soit 8
and #7,d2 ; l'instruction AND permet grâce à un miracle de la nature d'obtenir le reste de d2/8
add d0,d1 ; Ajout du reste à d1
add #1,d1
add d1,a1 ; Ajout du total à a1
move.b #8,d3
sub d2,d3
move.w #7,d1
boucle:
clr.l d0
;clr.w d0 ; efface le contenu de d0 (pour plus tard)
move.b (a0)+,d0 ; copie une ligne du sprite (a0 contient l'adresse du sprite)
lsl.l d3,d0
;lsl.w d3,d0 ; décale cette ligne de quelques pixels (en fonction de la coordonnée x d'affichage)
move.l d0,(a1)
;move.w d0,(a1) ; copie le sprite en mémoire vidéo (comme on copie un word, il fallait que d0.w soit "vierge")
add #30,a1 ; on pointe sur la ligne suivante de l'écran
dbra d1,boucle
move.l ngetchx*4(a5),a0 ; on attend l'appui sur une touche
jsr (a0)
pea.l 3840
move.l d4,-(a7) ;source: adresse du bloc alloué
pea.l $4c00 ;destination: adresse de l'écran
move.l memcpy*4(a5),a0
jsr (a0) ;restaure l'écran
addq.l #8,a7
move.l d4,(a7)
move.l HeapFreePtr*4(a5),a0
jsr (a0) ;libère le bloc alloué
nomem:
addq.l #4,a7 ;nettoie la pile
movem.l (a7)+,d0-d4/a0-a5 ;restaure d0-d4 et a5
rts
croix: ; Placer les données en fin de programme avec les autres variables.
dc.b %00000000
dc.b %00000000
dc.b %00011000
dc.b %00011000
dc.b %10011001
dc.b %10100101
dc.b %11111111
dc.b %11011011 /[pre