
Comment découper son écran en deux zones mémoire distinctes pour afficher un HUD?
Sur la gamme Amstrad Plus, il existe un registre SPLIT-SCREEN pour découper son écran en deux zones distinctes et indépendantes
C'est un classique du jeu d'arcade. Un bloc pour la zone de jeu et un bloc pour le HUD. Certains jeux intègrent le HUD dans la page principale, c'est le plus simple des cas mais il se limite aux écrans physiquement statiques, à savoir les scrollings logiciels uniquement. Pour que la méthode soit compatible avec les scrollings hard, il faut rendre indépendants les deux écrans.
Quelques révisions s'imposent :
- La taille totale de l'écran affiché se compte en ligne de blocs (de 8 lignes par défaut). C'est le registre 4 qui définit ce nombre de lignes. La vérification de cette valeur étant effectuée en fin de bloc, il faut mettre la valeur 38 pour afficher 39 blocs, notre écran par défaut.
- 39 blocs de 8 lignes font 312 lignes au total (50Hz), mais retenons surtout le nombre de lignes!
- La VBL qui sert à positionner l'écran verticalement est définie par le registre 7. Le déclenchement de la VBL dépend du compteur de blocs (appelons-le C4 comme dans ACE-DL). Par défaut sa valeur est de 30.
- Si le registre 7 est supérieur à la valeur du registre 4, la VBL n'est jamais déclenchée, nous verrons pourquoi c'est important.
Voici l'écran au démarrage de la machine (Merci Grimm pour ce schéma, souvent copié, jamais égalé).

Une première découpe stable en Basic
On va se faire une première découpe pédagogique, c'est à dire une découpe STABLE!
Comme il n'est pas possible de découper les 39 blocs en deux, nous allons partir sur une base de 38 blocs. N'importe quel émulateur ou Amstrad ne devrait que peu sourciller.
Nous établissons notre registre 4 à 18 (blocs 0 à 18 font 19 blocs).
Mais que devient notre VBL avec une valeur R4 si faible? Elle disparait! Il faut aussi changer la position de la VBL pour lui trouver une équivalence.
Sur le schéma, j'ai renuméroté les valeurs de R4 en accord avec notre rupture, on voit que pour que la VBL soit au même endroit, il faut redéfinir R7 à 11. Et comme je l'ai symbolisé sur le schéma, la VBL va avoir lieu deux fois par image affichée! Hé oui, comme le compteur C4 arrive à 11 dans notre premier bloc, il n'y a aucune raison que cela ne déclenche pas de VBL.
Pourquoi avons-nous un écran "correct" alors? Car si la VBL arrive trop tôt, elle est ignorée par les moniteurs Amstrad, la plupart des télévisions cathodiques et quasiment tous les émulateurs.
 Le code source en Basic est simple. BORDER 13 OUT &BC00,7 : OUT &BD00,11 OUT &BC00,4 : OUT &BD00,18
L'affichage est un peu confus, on peut clarifier un peu en réduisant la zone de données en accord avec notre nouvelle VBL (registre R6). Et oh magie, notre schéma théorique et la capture se ressemblent ;)
OUT &BC00,6 : OUT &BD00,12
Maintenant, si nous voulons supprimer la première VBL et recoller les morceaux, il va falloir passer à l'assembleur. La suite se passe dans [l'article suivant]. Roudoudou CPCrulez[Content Management System] v8.732-desktop Page créée en 489 millisecondes et consultée 13 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|