Amstrad Plus Forum Index

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

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

tentative scrolling soft en utilisant la pile

 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video
Previous topic :: Next topic  
Author Message
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Tue 19 Jun - 10:07 (2018)    Post subject: tentative scrolling soft en utilisant la pile Reply with quote

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


Back to top
Publicité






PostPosted: Tue 19 Jun - 10:07 (2018)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Tue 19 Jun - 12:53 (2018)    Post subject: tentative scrolling soft en utilisant la pile Reply with quote

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 ?

Back to top
snake_plissken


Offline

Joined: 03 Dec 2014
Posts: 358
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 26
Moyenne de points: 0.07

PostPosted: Tue 19 Jun - 13:10 (2018)    Post subject: tentative scrolling soft en utilisant la pile Reply with quote

Le problème est dans la boucle LOOPANIM

Back to top
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Wed 20 Jun - 16:37 (2018)    Post subject: tentative scrolling soft en utilisant la pile Reply with quote

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


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group