Amstrad Plus Index du Forum

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

tentative scrolling soft en utilisant la pile

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Programmation Cpc -> Affichage video
Sujet précédent :: Sujet suivant  
Auteur Message
Sid


Hors ligne

Inscrit le: 01 Mai 2018
Messages: 171
Masculin
Point(s): 139
Moyenne de points: 0,81

MessagePosté le: Mar 19 Juin - 10:07 (2018)    Sujet du message: tentative scrolling soft en utilisant la pile Répondre en citant

bonjour à tous

je tente de faire un scrolling soft d'un sprite de 32 pixels par 32 pixels en utilisant la pile.
Pouvez vous voir ce que j'ai oublié dans mon code ?

 
Code:
  ORG &4000:ENT $


;; affichage et scrolling soft d'un sprite de 32 pixels par 32 pixels

di
ld (pile+1),sp ; sauve la pile avant de l'utiliser
ld sp,font ; on pointe la pile sur le sprite
ld hl,&c000 ; adresse d'ecran a afficher
loopmain: pop hl
ld b,16
loop: pop de
ld (hl),e:inc hl ; on afficher le sprite
ld (hl),e:inc hl
ld (hl),e:inc hl
ld (hl),e:inc hl
ld (hl),e:inc hl
ld (hl),e:inc hl
ld (hl),e:inc hl
ld (hl),e:inc hl
call bc26 ; recuperation de l'adresse de l'autre ligne en hl
djnz loop
pop hl
inc hl
jp loopmain
pile ld sp,pileaddress
ei
call waitkey
ret

waitkey
 call &BB06
 ret
bc26
 Ld a,h ; on recupere le contenu de h dans a
 Add a,8 ; on ajoute 8 pour passer à la ligne suivante
 Ld h,a ; on met la nouvelle valeur dans h
 Ret nc ; on arrete ici s'il n'y a pas de depassement
 Ld bc,&c050 ; pour un ecran de 80 caracteres
 Add hl,bc ; s'il y a depassement on additionne &c050 a l'adresse.
 Res 3,h ; pour eviter le depassement de la zone et faire une Raz de l'adresse ecran
 Ret

pileaddress dw 0

font:
DB &00, &00, &00, &00, &00, &00, &00, &00
DB &00, &00, &00, &00, &00, &00, &00, &00
DB &76, &F0, &F8, &F0, &C0, &00, &00, &00
DB &71, &FF, &FF, &FE, &C0, &00, &00, &00
DB &71, &0F, &0F, &1E, &E0, &00, &00, &00
DB &71, &0F, &0F, &0F, &E0, &00, &00, &00
DB &71, &0F, &0F, &0F, &F0, &00, &00, &00
DB &73, &0F, &0F, &0F, &78, &00, &00, &00
DB &71, &0F, &0F, &0F, &78, &80, &00, &00
DB &71, &0F, &0F, &0F, &3C, &80, &00, &00
DB &71, &0F, &78, &87, &3C, &C0, &00, &00
DB &71, &0F, &78, &C7, &1E, &C0, &00, &00
DB &71, &0F, &78, &E3, &1E, &E0, &00, &00
DB &71, &0F, &78, &E3, &0F, &E0, &00, &00
DB &71, &0F, &78, &F1, &0F, &F0, &00, &00
DB &71, &0F, &78, &F1, &0F, &78, &00, &00
DB &71, &0F, &78, &71, &8F, &78, &80, &00
DB &71, &0F, &78, &70, &8F, &3C, &88, &00
DB &71, &0F, &78, &30, &C7, &3D, &C8, &00
DB &71, &0F, &78, &30, &C7, &1E, &C0, &00
DB &71, &0F, &78, &10, &E3, &1E, &E0, &00
DB &71, &0F, &78, &70, &E3, &0F, &E0, &00
DB &71, &0F, &78, &71, &EF, &0F, &F0, &00
DB &71, &0F, &78, &71, &8F, &0F, &78, &00
DB &71, &0F, &78, &71, &0F, &0F, &78, &80
DB &71, &0F, &78, &71, &0F, &0F, &3C, &80
DB &75, &0F, &78, &77, &0F, &0F, &3C, &C0
DB &71, &0F, &78, &71, &F0, &C3, &1E, &C0
DB &71, &0F, &78, &70, &F0, &CF, &1E, &E6
DB &71, &0F, &78, &70, &F0, &EF, &0F, &E6
DB &70, &F0, &F1, &00, &00, &E7, &0F, &F6
DB &70, &F0, &F1, &00, &00, &F0, &F0, &F0
DB &72, &F0, &F0, &00, &00, &70, &F0, &F0
DB &00, &00, &00, &00, &00, &00, &00, &00


Revenir en haut
Sid


Hors ligne

Inscrit le: 01 Mai 2018
Messages: 171
Masculin
Point(s): 139
Moyenne de points: 0,81

MessagePosté le: Mar 19 Juin - 12:53 (2018)    Sujet du message: tentative scrolling soft en utilisant la pile Répondre en citant

bon nouvelle tentative avec un ldir simple la j'affiche bien mon sprite mais reset, donc je ne vois pas le sprite se déplacer :

 
Code:
 ORG &2000:ENT $


;; affichage et scrolling soft d'un sprite de 16 par 6 lignes


ld hl,font ; source
ld de,&c000 ; destination
ld b,16 ; hauteur du sprite
loopsprite: push bc  ; affichage du premier sprite
 push de ; on met dans pile l'adresse de destination
 ld bc,6 ; on met la longueur du sprite
 ldir ; on remplit toute la ligne
 pop de ; on recupere l'adresse destination
 call bc26 ; on recupere dans de la ligne inferieure dans de
 pop bc ; on recupere la longueur du sprite
 djnz loopsprite ; on boucle tant que hauteur pas ok

ld de, &c001 ; on commence a donner l'adresse de l'animation
ld hl,&c000 ; on met l'adresse de la source du sprite sur ecran
ld b, 16 ; hauteur du sprite
loopanim: push bc
push de
ld bc,6
ldir
call bc26
pop bc
djnz loopanim
push bc
push af
call vbl ; attente vbl
pop af
pop bc
inc de ; on passe a l'adresse suivante
inc hl
ld b,16
call waitkey
jp loopanim



call waitkey
ret

waitkey
push af
push hl
push de
push bc
call &BB06
pop bc
pop de
pop hl
pop af
ret

bc26 ld a,d ; on récupère le poids fort du registre d
 add a,8
 ld d,a ; on remet la bonne valeur à d
 ret nc ; on s'arrête ici si pas de dépassement (a>&ff)
 ex de,hl ; on inverse le contenu des registres HL et De
 ld bc,&c050 ; prochaine ligne si écran de 80 caractères
 add hl,bc ; on a ici la prochaine ligne après calcul
 ex de,hl ; on remets les valeurs de registres HL et DE à leur place
 ret


vbl ld b,&f5
synchro in a,(c)
 rra
 jr nc,synchro

font:
 DB &00, &00, &0C, &0C, &08, &00, &00, &00
 DB &FC, &FC, &0C, &00, &00, &54, &EC, &DC
 DB &0C, &08, &00, &0C, &FC, &FC, &0C, &08
 DB &00, &0C, &5C, &FC, &AC, &0C, &00, &CC
 DB &CC, &FC, &FC, &0C, &00, &CC, &CC, &FC
 DB &FC, &0C, &4C, &8C, &CC, &FC, &FC, &0C
 DB &0C, &0C, &EC, &FC, &FC, &5C, &5C, &AC
 DB &AC, &FC, &0C, &5C, &5C, &AC, &AC, &5C
 DB &5C, &5C, &54, &FC, &FC, &5C, &5C, &5C
 DB &00, &A8, &FC, &FC, &5C, &5C, &00, &FC
 DB &FC, &FC, &5C, &AC, &00, &0C, &0C, &0C
 DB &04, &08, &00, &00, &00, &00, &00, &00
Avez vous une idée ?

Revenir en haut
snake_plissken


Hors ligne

Inscrit le: 03 Déc 2014
Messages: 383
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 52
Moyenne de points: 0,14

MessagePosté le: Mar 19 Juin - 13:10 (2018)    Sujet du message: tentative scrolling soft en utilisant la pile Répondre en citant

Le problème est dans la boucle LOOPANIM

Revenir en haut
Sid


Hors ligne

Inscrit le: 01 Mai 2018
Messages: 171
Masculin
Point(s): 139
Moyenne de points: 0,81

MessagePosté le: Mer 20 Juin - 16:37 (2018)    Sujet du message: tentative scrolling soft en utilisant la pile Répondre en citant

je réponds à moi même

Voici le code corrigé :

 
Code:
 ORG &2000



;; affichage et scrolling soft d'un sprite de 16 par 6 lignes


ld hl,font ; source
ld de,&c001 ; destination
call displaysprite
call waitkey

ld hl,font
ld de,&c000

 
loopscroll
 call vbl ; on attend la vbl
 call nextaddress
 call displaysprite ; on affiche le sprite
 jp loopscroll
 
nextaddress
 ld a,(counter)
 inc a
 cp 80
 jp z,resetcounter
 ld (counter),a
 ld d,&c0
 ld e,a ; de contient maintenant l'adresse destination
 ld hl,font
 ret
 resetcounter
 ld a, 0
 ld (counter),a
 jp nextaddress

displaysprite
 ld b,16 ; hauteur du sprite
 loopdisplaysprite push bc ; affichage du premier sprite
 push de  ; on met dans pile l'adresse de destination
 ld bc,6 ; on met la longueur du sprite
 ldir ; on remplit toute la ligne
 pop de ; on recupere l'adresse destination
 call bc26 ; on recupere dans de la ligne inferieure dans de
 pop bc ; on recupere la longueur du sprite
 djnz  loopdisplaysprite ; on boucle tant que hauteur pas ok
 ret

waitkey
push af
call &BB06
pop af
ret

bc26 ld a,d ; on recupere le poids fort du registre d
 add a,8
 ld d,a ; on remet la bonne valeur e d
 ret nc ; on s'arrête ici si pas de depassement (a>&ff)
 ex de,hl ; on inverse le contenu des registres HL et De
 ld bc,&c050 ; prochaine ligne si ecran de 80 caracteres
 add hl,bc ; on a ici la prochaine ligne apres calcul
 ex de,hl ; on remets les valeurs de registres HL et DE a leur place
 ret


vbl ld b,&f5
synchro in a,(c)
 rra
 jr nc,synchro
 ret

font:
 DB &00, &00, &0C, &0C, &08, &00, &00, &00
 DB &FC, &FC, &0C, &00, &00, &54, &EC, &DC
 DB &0C, &08, &00, &0C, &FC, &FC, &0C, &08
 DB &00, &0C, &5C, &FC, &AC, &0C, &00, &CC
 DB &CC, &FC, &FC, &0C, &00, &CC, &CC, &FC
 DB &FC, &0C, &4C, &8C, &CC, &FC, &FC, &0C
 DB &0C, &0C, &EC, &FC, &FC, &5C, &5C, &AC
 DB &AC, &FC, &0C, &5C, &5C, &AC, &AC, &5C
 DB &5C, &5C, &54, &FC, &FC, &5C, &5C, &5C
 DB &00, &A8, &FC, &FC, &5C, &5C, &00, &FC
 DB &FC, &FC, &5C, &AC, &00, &0C, &0C, &0C
 DB &04, &08, &00, &00, &00, &00, &00, &00

counter db 0

voilou

aller je continue Smile


Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Programmation Cpc -> Affichage video Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com