★ CODING ★ CLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★ |
5/10.2.1 - Reproduction de blocs graphiques | Coding Classeurs Weka |
5/10.2.1 Reproduction de blocs graphiquesAprès avoir entré les noms d'écran (avant et après duplication) et les couleurs du dessin, un curseur graphique apparaît en bas et à gauche de l'écran. Dirigez-le avec les touches du bloc numérique pour l'amener en bas et à gauche du rectangle délimitant le bloc à recopier. Appuyez ensuite sur la touche « ENTER ». Déplacez à nouveau le curseur pour l'amener en haut et à droite du même rectangle. Appuyez sur la touche « ENTER ». Un rectangle apparaît. Si l'encadrement est correct (Question « OK ? », Réponse « 0 » (Oui)) déplacez le curseur pour l'amener en bas et à gauche de l'endroit où le bloc doit être dupliqué. Appuyez sur « ENTER ». La copie s'effectue instantanément. A ce niveau, vous pouvez appuyer sur :
Le programme BASIC de duplication est le suivant :
Lignes 1110 à 1330 : Chargement des sous-programmes ASSEMBLEUR. Le programme BASIC défini ci-dessus utilise des programmes écrits en ASSEMBLEUR. Les sous-programmes de mémorisation et de restitution d'écrans décrits précédemment sont repris ici. De plus, pour permettre les sauvegarde et restitution de portions d'écrans de tailles plus modestes définies par l'utilisateur, deux sous-programmes supplémentaires sont nécessaires : nous les appelerons MBG (Mémorisation de Blocs Graphiques) et ABG (Affichage de Blocs Graphiques). MBG : Avant de décrire la structure du sous-programme MBG, il est nécessaire de faire un rappel sur la structure de l'écran. L'écran peut être considéré comme une mémoire RAM implantée entre les adresses #C000 et #FFFF. Reportez-vous à la partie 5/7 pour avoir le détail du codage de l'écran au niveau pixel. Le problème suivant se pose : Soit un rectangle de dimensions quelconques dessiné sur l'écran. Comment mémoriser le dessin qui s'y trouve inscrit ? Vu la complexité structurale de la mémoire d'écran, les constructeurs des CPC ont eu le tact d'agrémenter le FIRMWARE de la routine « DOT-POS » qui, lorsqu'on lui fournit des coordonnées d'écran absolues X et Y, est capable de donner l'adresse de l'octet correspondant en mémoire RAM. Partant de cette constatation, notre tâche est grandement simplifiée. Connaissant la largeur du rectangle, et vu qu'un octet contient quatre pixels en MODE 1, il sera très simple de sauver une ligne élémentaire. Sachant quelle est la hauteur du rectangle et munis de la routine DOTPOS, le problème devient enfantin. Cependant, précisons un autre petit détail : il ne faut pas oublier de dévalider la ROM supérieure qui occupe également les octets #C000 à #FFFF. La logique de MBG suit donc l'organigramme suivant :
Voici le listing ASSEMBLEUR correspondant occupant les lignes 1250 à 1270 dans le programme BASIC de recopie d'objets.
ABG Puisque nous savons sauvegarder en mémoire un objet situé sur l'écran, nous pouvons penser qu'il est simple d'afficher un objet sauvegardé en RAM à une position quelconque sur l'écran. La démarche est effectivement simple : elle consiste à faire l'opposé de la démarche précédente, à savoir :
D'où le listing du sous-programme ABG dont les données hexadécima les occupent les lignes 1310 à 1330 dans le programme BASIC de recopie d'objet.
Remarque : Pour faciliter l'interfaçage entre le programme BASIC de recopie d'objets et MBG/ABG, un sous-programme interface a été écrit pour MBG et un autre pour ABG. Le premier donne les informations nécessaires à MBG dans les registres A, BC, DE et HL :
Le deuxième donne les informations nécessaires à ABG dans les registres BC, DE et HL :
|