CODINGCLASSEURS 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 graphiques

Aprè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 :

  • « R » pour revenir à l'écran précédent,
  • « S » pour obtenir une sauvegarde magnétique, une autre touche pour poursuivre la duplication.

Le programme BASIC de duplication est le suivant :

1000 REM Recopie d'un objet sur 1'écran
1010 REM ==================================================
1020 REM 1) Determiner le coin INF GAUCHE de l'objet a déplacer
1030 REM 2) Determiner le coin SUP DROIT de l'objet a déplacer
1040 REM 3) L'objet est encadre
1050 REM 4) Repondre "0" si l'encadrement est correcti"N" sinon
1060 REM 5) Déterminer le coin supérieur gauche de la nouvelle position
1070 REM 6) L'objet apparait a sa nouvelle position
[INCOMPLET]

Lignes 1110 à 1330 : Chargement des sous-programmes ASSEMBLEUR.
Lignes 1350 à 1470 : Initialisation du programme.
Ligne 1480 : Chargement de l'image.
Ligne 1490 : Sauvegarde de l'image pour permettre l'option « R » par la suite.
Lignes 1550 à 1660 : Gestion du curseur.
Lignes 1670 à 1790 : Mémorisation des positions du curseur suite à l'appui sur la touche « ENTER ».
Lignes 1820 à 1900 : Duplication.
Lignes 1910 à 1960 : Attente d'une action au clavier (R, S ou autre).

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.

1 ;
2 ;Memorisateur de blocs graphiques
3 ;
4 ;Entree: BC=Pos X au départ

[INCOMPLET]

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 :

  1. Lecture d'une ligne élémentaire en mémoire,
  2. Affichage de la ligne sur l'écran,
  3. Passage à la ligne suivante,
  4. Si toute la hauteur du rectangle n'est pas parcourue, retour en 1.

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.

1;
2 ; Afficheur de blocs graphiques
3 ;
4 ; Entree: BC=Pos X depart
5 ; DE=Pos Y départ
6 ; HL=@ RAM départ
7 ; Sortie: Affichage du bloc
8 ; Pt d'entree: ABG

[INCOMPLET]

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 :

  • BC est l'abcisse absolue du rectangle source en haut et à gauche.
  • DE est l'ordonnée absolue du rectangle source en haut et à gauche.
  • H est la largeur en octets (1 octet = 4 pixels) du rectangle.
  • L est la hauteur en pixels du rectangle.
  • A donne le numéro de bloc à sauvegarder (0 si un seul bloc est sauvegardé à la fois. C'est le cas ici.)

Le deuxième donne les informations nécessaires à ABG dans les registres BC, DE et HL :

  • BC est l'abscisse absolue du rectangle à recopier en haut et à gauche.
  • DE est l'ordonnée absolue du rectangle à recopier en haut et à gauche.
  • HL est l'adresse en RAM où se trouve le pavé à recopier (largeur et hauteur sont contenues dans le bloc de mémoire rempli par MBG : il est donc inutile de les préciser ici).

1 ORG 3018H
2 LOAD 3018H
3 MBG: EQU 3035H ;Memo bloc graph
4 ABG: EQU 30A2H ;Affich bloc graph
[INCOMPLET]

Page précédente : 5/10.2 - Utilitaires de manipulation de dessins

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 118 millisecondes et consultée 552 fois

L'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.