Je teste ce matin le scrolling vertical au pixel sur un CPC+. Pour ça j'utilise conjointement le registre &6804 de l'ASiC et l'appel firmware &bc05. Ca fonctionne très bien.
Par contre j'ai un soucis quand je combine ça avec le split d'écran de l'ASIC (registres &6801 et &6802) : j'aimerai que le scroll se fasse uniquement sur le haut de l'écran. C'est OK pour les déplacements de 8 pixels mais pas pour le scroll au pixel de l'ASIC qui s'applique aussi sur la seconde partie de l'écran (partie basse de l'écran définie à l'adresse &6802, qui 'gigotte' du coup).
Il doit y avoir un truc qui m'échappe... Vous avez une idée ?
Dans le même ordre d'idée, si je veux que ma partie fixe soit en haut de l'écran, comment je peux faire avec l'ASIC? Sauf erreur on ne précise jamais l'adresse de la mémoire video où s'applique le scroll au pixel. Bref je ne comprends bien pas comment ça marche ;D
Le SSR a une prise en compte immédiate et "définitive". Il n'est pas associé d'une façon ou d'une autre avec les autres registres. Donc si tu le modifies pour scroller au pixel, il faut le remettre comme il faut là où il doit l'être!
Le SSR a une prise en compte immédiate et "définitive". Il n'est pas associé d'une façon ou d'une autre avec les autres registres. Donc si tu le modifies pour scroller au pixel, il faut le remettre comme il faut là où il doit l'être!
La routine de scroll au pixel est comme çà :
Code :
ScrollH:=Succ(ScrollH) And 7; Inline($cd/firm/$bd19); { Wait Fly back } If ScrollH=0 Then Begin ScrollLigne:=ScrollLigne+80; InLine($2a/ScrollLigne/$cd/firm/$bc05); { Set Offset } End; DoScroll(ScrollH Shl 4); { Write ASIC &6804 }
Le résultat donne :
Pour que ca fontionne avec le split de l'asic et avoir une partie d'image fixe, il faudrait donc que je force la valeur du registre &6804 à zéro au moment précis de la rupture ?
Si tu veux avoir une partie fixe en bas de l'écran, avec le splitADR de l'asic, il faudra aussi une interruption à ce moment qui remette le SSR à zéro, tout à fait (idéalement dans les 16 nops qui précèdent la ligne pour qu'on ne voit rien)
Mais aussi remettre le SSR à la fin de la dernière ligne de l'écran pour ton scrolling ou à minima, avant que ça recommence tout en haut (pendant la VBL ça peut se faire aussi) Pas possible de faire une interruption + pour ça car dû au système d'interruption, tu ne peux commencer qu'à partir de la 2è ligne visible (1ère si pas de border sur les côtés)
Si tu veux avoir une partie fixe en bas de l'écran, avec le splitADR de l'asic, il faudra aussi une interruption à ce moment qui remette le SSR à zéro, tout à fait (idéalement dans les 16 nops qui précèdent la ligne pour qu'on ne voit rien)
Mais aussi remettre le SSR à la fin de la dernière ligne de l'écran pour ton scrolling ou à minima, avant que ça recommence tout en haut (pendant la VBL ça peut se faire aussi) Pas possible de faire une interruption + pour ça car dû au système d'interruption, tu ne peux commencer qu'à partir de la 2è ligne visible (1ère si pas de border sur les côtés)
Merci, ça devient plus clair! vais expérimenter çà ;D
Une question encore : dans les jeux d'actions sur CPC, la bonne pratique (si il y en a une !) c'est plutôt d'utiliser les interruptions pour maj l'écran au moment du rafraichissement (genre je calcule tout et j'affiche en bloc à ce moment là) ou un alors c'est un calcul précis de timing pour ne pas perdre trop de temps à attendre la VLB (qui est la même chose que ce que le firmware appelle Fly Back j'imagine) ? Comme j'utilise beaucoup le firmware je me suis penché sur tout ce permet de gérer les interruptions avec les logiques de Block list et ça semble vraiment intéressant même si un peu compliqué.
PS :je m'aperçois que je n'ai publié dans le bon topic...
Merci, ça devient plus clair! vais expérimenter çà ;D
Une question encore : dans les jeux d'actions sur CPC, la bonne pratique (si il y en a une !) c'est plutôt d'utiliser les interruptions pour maj l'écran au moment du rafraichissement (genre je calcule tout et j'affiche en bloc à ce moment là) ou un alors c'est un calcul précis de timing pour ne pas perdre trop de temps à attendre la VLB (qui est la même chose que ce que le firmware appelle Fly Back j'imagine) ? Comme j'utilise beaucoup le firmware je me suis penché sur tout ce permet de gérer les interruptions avec les logiques de Block list et ça semble vraiment intéressant même si un peu compliqué.
PS :je m'aperçois que je n'ai publié dans le bon topic...
En logique "démo", on attendait pas : se débrouillait pour afficher une zone pendant que le rayon n'y passait pas. Par exemple pour modifier la moitié basse, on le faisait pendant que le rayon parcourait la première moitié de l'affichage de l'écran, puis dans la seconde on modifiait la première partie de l'écran.
On parlait de "1ere et moitié de VBL", mais c'est un abus de langage.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 9 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum