1

et quel beau bordel ! ^^
donc si vous pouviez me dire comment realiser un scrolling...

2

Si tu commence l'assembleur, essai pas directement de faire un scrolling smile
Enfin si tu veux quand même essayer, tu dois en fait décaler tous les bits d'une adresse (ton sprite) vers la droite, gauche , pour ça utilise les division ou multiplication par 2 : genre, pour décaler 00110011, tu mutliplie par 2 et t'obtiens 01100110(ya une fonction qui fait ça je sais plus le nom désolé). Pour le scrolling vertical , tu fais plusieurs fois la multiplication ou la division.
J'espere que t'as compris, j'écris sur le tas grin
Si c'est pour décaler tout l'écran, tu dois faire ça avec le plootscreen en entier (= graphbuffer)
Ah ah ! Sacré Gödel, il avait l'idée de vouloir mettre au chômage tous les mathématiciens ce fourbe !

3

Euh, il me semble plutôt que c'est lorsque tu veux multiplier par deux que tu décales par la fonction idoine et non l'inverse (enfin, je veux dire, l'inverse marche aussi, mais la fonction Z80 est considérée comme une fonction de décalage avant tout)...

4

avec le plotscreen en entier?
merci, je vais essayer.
en fait je suis pas vraiment completement debutant en asm, ça fait un mois que je m'y suis mis...

5

Euh, il me semble plutôt que c'est lorsque tu veux multiplier par deux que tu décales par la fonction idoine et non l'inverse (enfin, je veux dire, l'inverse marche aussi, mais la fonction Z80 est considérée comme une fonction de décalage avant tout)...


Oui mais tu peux multiplier par 2 avec add a,a
La fonction dont je parlais est en effet principalement pour décaler et non pour multiplier...
Ah ah ! Sacré Gödel, il avait l'idée de vouloir mettre au chômage tous les mathématiciens ce fourbe !

6

salut de nouveau!
j'ai une routine pour afficher un sprite (avec chasm) , mais seulement la premiere ligne s'affiche correctement, le reste est un infame gribouillis.
je suppose que l'ereur est donc au niveau du changement de ligne.
pourriez vous m'aider?
merci d'avance
bcall(4540) ; efface l'écran
ld bc,0808 ; On définit la hauteur du sprite
ld (8265),bc ; de 16 et sa largeur de 8 (facultatif si ca ne change pas : Cf. plus bas)
ld bc,0007 ; BC=coordonnées du sprite à
; afficher: XXYY, avec le coin
; superieur-gauche comme ORG.
ld de,sprite ; DE=adresse du sprite dans le programme. c'est une simple étiquette.
call spritegraph ; Appel de la routine d'affichage du sprite.
ret ; Retour au basic.


ld a,(8265) ; On charge la hauteur du sprite
contline ;label
push af ; On la mémorise dans la pile
push bc ; on mémorise aussi les coord.
; de la ligne que l'on traite
; actuellement.
ld a,(8266) ; HL=largeur du sprite. c'est lui
ld h,a ; qui va compter qu'on parcourt
; la largeur correctement
ld a,(de) ; On met dans A la valeur dont
; l'adresse est pointée par DE

contcol ;label
rlca ; on fait le décalage, CY=bit7 de A
jp c,pointon ; Si CY=1 alors dessiner pt. noir

suite: ;label
inc b ; Ensuite, on avance coordX pour
; le pt. suivant.
dec h ; on décremente le compteur de
jp nz,contcol ; colonne s'il n'est pas égal
; à 0, on continue la ligne
inc de ; la ligne est finie, on passe à
; la suivante: le pointeur du
; sprite en mémoire est incrémenté.
pop bc ; on récupère les coord.
dec c ; pour calculer la ligne suivante à l'écran.
pop af ; on récupère le compteur de ligne
dec a ; et on vérifie si toutes les lignes
; ont étés faites(=0 dans ce cas)
jp nz,contline ; ce n'est pas fini? on continue
; d'afficher les lignes alors!
ret ; Retour de la routine

pointon
push de ; il faut préserver DE, car
ld d,01 ; l'instruction IPOINT a besoin
bcall(47E3) ; de D: si D=1 alors on trace ;47E3=i_point
; un point noir aux coord. BC.
pop de; on récupère DE.
jp suite ; et on continue le traitement à "suite"


sprite: .db FFFFFFFFFFFFFFFF ;carre noir

7

ouai tu peut faire un scrolling vers la gauche en décalant chaque octet du graph_buf vers la gauche:

ld hl,APD_BUF
ld b,64
SG_boucle: ; on décale tous les octets de la ligne
srl (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
rr (hl)
inc hl
djnz SG_boucle ; on répète l'opération pour les 64 lignes


Pour faire un scroll vers le bas ou vers le haut, il faut utiliser l'inctruction ldir, pas la peine d'utiliser les multiplications...

8

Pour ta routine, elle ne marche que pour des sprites de largeur au plus 8. Dans la boucle contcol, tu copie les données du sprite dans a et tu le décale vers la gauche pour voir si le point est noir ou pas, jusque là, pas de prob. Mais si tu décale ce registre plus de 8 fois (si la largeur de ton sprite est >8), a aura n'importe quelle valeur! C'est pour ça que le reste est un gribouillis sans nom...
Si tu veux déboguer ta routine , il te faudrait stocker de nouveau dans a les donneés du sprite tous les 8 décalages... Trop compliqué!!
A mon avis, tu es parti sur une mauvaise méthode: tester et copier chaque pixel est déjà très long, alors si en plus tu appelle un routine de la ROM (i_point), tes jeux risquent d'être vraiment très lents (comme du basic tongue ). Tu devrait chercher une méthode qui copie octet par octet et non pixel par pixel.


Un dernier truc, tu peut gagner de la place (et surtout de la vitesse) en changeant quelques trucs dans ton prog:
- d'abord au lieu d'utiliser rlca, utilise add a,a qui fait la même chose ici et qui est plus court
- utilise l'instruction jr au lieu de jp, ça fait un octet de moins à chaque fois
- pour appeler la routine pointon, utilise call au lieu jr ... jr...

9

merci ,mais finalement je n'en ai plus besoin ^^
m'enfin ça servira toujours a quelqu'un ayant le meme probleme et passant par la.

10

Au passage, si yen a que ça interesse, voici un programme qui fait pas mal de truc:

http://www.ticalc.org/archives/files/fileinfo/393/39339.html

on peut faire des scrolls et afficher des sprites super facilement (non, non je ne fait du tout de pub!)

11

C'est sur que c'est bien comme lib, mais il faudrai la porter pour les 83/83+, comme ça il y aurai déjà beaucoup plus de monde pour l'utiliser.

12

j'y travaille... mais j'ai toujours pas de tuto sur la VAT de la TI83! la lib marche une fois sur deux, c'est pas top...

13

Ca y est! J'ai effectué le portage sur TI-83+, la lib est disponible sur ticalc.org. Quant aux TI-83, je n'ai toujours pas de doc, mais on s'en fout, plus personne n'en a smile
Voilà si vous avez des suggestions, n'hesitez pas...

14

Bah j'ai tésté justement et y'a plusieurs problèmes après la compilation... (tu peut créer un sujet spécialement pour ta lib, parce que là ça devient de plus en plus du hors sujet cheeky).

15

je vais la tester

16

dancingmad (./13) :
uant aux TI-83, je n'ai toujours pas de doc, mais on s'en fout, plus personne n'en a smile.gif

Si !
Et des 82 aussi !

«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

17

Ouai, les 82 je suis d'accord (j'en ai une d'ailleurs), mais je connaît pas bcp de monde qui possède une TI83

18

oui, mais des 82 stats, si.

19

Moi je connais pleins de gens qui possèdent des 83. (p-t par ce que je suis plus vieux que vous..)
De plus vu que les 82 stats sont des 83, du pdv purement technique y'a encore pleins de 83 oui
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

20

je suis plus vieux que vous


A quel point ? smile

21

ça fait 2.5 ans que j'ai eu mon bac..
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

22

3.5, j'ai gagné ! rotfl