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 

Affichage de "tiles" à la pile (Avec motif répétition)

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

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 27 Feb - 14:50 (2019)    Post subject: Affichage de "tiles" à la pile (Avec motif répétition) Reply with quote

Bonjour, 
 
 
Pour faire suite au dernier sujet posté sur le forum sur le défilement parallaxe, j'ai décidé aujourd'hui, grâce à une discussion avec Roudoudou, de vous présenter la routine d'affichage des tiles de Dragon Ninja (Imagine/Ocean) codée par James Higgins. 
 
Code:
;
; Aff tiles Dragon Ninja - James Higgins
; Routine originale implémentée en #8e92
; --- In -> DE contient le motif 4 pixels a dupliquer (ici #C3C3)
; --------> HL contient l'adresse ecran de fin des tiles a afficher (ici #00be) 

 ld (pile+1),sp ; sauve pile
 ld a,(#11dc) ; récupère poids fort de l'adresse écran (#c0 ou #80)
 add a,h ; 
 ld h,a ; récupère poids fort
 ld b,8 ; chaque tiles fait 8 lignes de haut
loop ld sp,hl
 ld a,h ; on pré-calcule la ligne suivante
 add a,8
 ld h,a
;
 repeat 30
 push de 
 rend
;
 dec sp
 dec sp
 dec sp
 dec sp
;
 repeat 30
 push de
 rend
;
 djnz loop
pile ld sp,0
 ret












 
Je vais donc tenter de vous expliquer le principe de la routine sus citée. 
 
 
En premier lieu, on sauvegarde la pile car on va l'utiliser plus loin.  
 
On récupère dans la case mémoire la valeur du futur poids fort, #cx ou #8x car on travaille ici, comme vous avez du le deviner en double buffer. 
 
On en profite pour calculer l'adresse de la prochaine ligne (#00 -> #c0 ou #80) selon le buffer sur lequel on travaille. 
 
On charge le registre B à 8 pour signifier la hauteur des tiles 
 
On charge la pile avec la valeur obtenue (#C0BE ou #80BE) 
 
DE est quant à lui préchargé avec les 2 octets suivants, #c3c3.  
 
Il ne reste plus qu'à Dépiler tout cela grâce à l'instruction Push DE 
 
Une fois tout dépilé, on reboucle jusqu'à ce que la hauteur soit égale à Zéro. 
 
Reste plus qu'à remettre la pile à la bonne valeur, et c'est parti. 
 
 
Le code est assez explicite mais si vous avez des questions, des choses à ajouter, je suis dispo. 
 
 
 

_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Last edited by Ast on Thu 28 Feb - 19:44 (2019); edited 2 times in total
Back to top
Publicité






PostPosted: Wed 27 Feb - 14:50 (2019)    Post subject: Publicité

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


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Feb - 22:30 (2019)    Post subject: Affichage de "tiles" à la pile (Avec motif répétition) Reply with quote

Il faut expliquer pourquoi on a DEC SP répété 4 fois quand même!


Dragon Ninja utilise un écran de 32 mots (64 octets) mais n'affiche que sur 60 octets, une routine se charge de tracer deux colonnes noires de 2 octets à droite et à gauche de l'écran


Mais pourquoi?


Pour ne pas s'emmerder à cliper les sprites! Ainsi, les personnages sont affichés en entier, au pire ça peut déborder, le tracé des colonnes noires en fin de création d'écran éclipsera ce qu'il faut


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Thu 28 Feb - 09:25 (2019)    Post subject: Affichage de "tiles" à la pile (Avec motif répétition) Reply with quote

Très bonne intervention !
C’est justement pour cela qu’il n’y a que 4 dec sp et non 8.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


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