CODINGHEBDOGICIEL ★ FORMATION A L'ASSEMBLEUR PRATIQUE LANGAGE MACHINE SUR AMSTRAD ★

La page pédagogique d'hebdogiciel 155: AdressageCoding Hebdogiciel

N'HABITE PAS A L'ADRESSE INDIQUEE

Après la parution, dans les deux dernières leçons, du listing complet du programme 'flèche', nous voici prêts à étudier en détails le fonctionnement de ses routines. Vous avez, bien entendu, rentré tout le listing assembleur, vous avez assemblé, vous avez rentré tout le listing basic et.... ça ne marchait pas I Seulement, comme vous êtes un crac en langage machine, vous avez tout de suite constaté que le basic indiquait de mauvaises adresses. Vous les avez corrigées et maintenant... ça marche ! ! ! Pour ceux qui sont encore un peu trop nuls pour découvrir par eux-mêmes une différence d'adresse entre l'assembleur et le basic, voici les corrections à apporter au listing 2 du mois dernier :

Adresse de la coordonnée X   = &A4CE &A4CF
Adresse de la coordonnée Y   = &A4CC
Adresse de test de 'COPY'    = &A4D1

Avec les nouvelles adresses des variables 'COX', 'COY' et 'FEU', vous devez être en mesure de corriger les valeurs des ' PEEK' et votre flèche DOIT fonctionner.

PRINCIPE GENERAL

Considérons, à partir de maintenant, que notre programme 'tourne'. Vous possédez donc un fichier assembleur source, un fichier binaire et un fichier basic. Pour analyser en détails les différentes routines qui composent le logiciel, commençons par tenter de comprendre le principe de fonctionnement de celui-ci. Le logiciel comporte 3 routines principales qui sont appelées à partir du basic :

IMFLE (Implantation de la flèche) ; s'occupe d'afficher la flèche à un endroit précis de l'écran, après avoir sauvegardé en mémoire la partie que va cacher la flèche.

DEPLE (Déplacement de la flèche) : routine la plus complète qui s'occupe de tester les touches du clavier, d'effacer la flèche en remettant â l'écran la partie préalablement sauvegardée et de l'afficher à sa nouvelle position.

EFFLE (Effacement de la flèche) : la plus simple des routines, puisqu'elle replace à l'écran la partie sauvegardée précédemment et c'est tout !

Le principe est donc simple :

1 - Sauvegarder la zone de l'écran où se trouvera la flèche.
2 - Afficher ladite flèche.
3 - Remettre à l'écran ta partie sauvegardée.
4 - Changer les coordonnées de la flèche.
5 - Recommencer le total.
LE DESSIN DE LA FLÈCHE

Nous allons commencer par analyser la partie la plus complexe de la routine principale. Il s'agit de l'affichage de la flèche à l'écran. Avant tout, voyons comment nous l'avons codée en mémoire :

La flèche fait 8 pixels de large et? de haut. Chaque pixel est codé sur deux bits et peut prendre l'une des trois valeurs suivantes :
00 = Pixel invisible, la couleur du pixel présent à l'écran ne sera pas changée.
01 = Le pixel prendra la couleur zéro (couleur du fond).
10 = Le pixel prendra la couleur définie dans la variable 'COULEU'.

Pourquoi la flèche est-elle de deux couleurs ? Pour une raison bien simple : si le dessous est de couleur zéro, on verra la couleur de la flèche, mais pas son contour. Par contre, si la flèche va à un endroit de sa propre couleur, on ne verra plus son centre mais son contour, qui est de couleur zéro. Compris ? Non ? Alors essayez et vous verrez. Une flèche qui bouge étant bien mieux qu'un long discours.

MÉTHODE DE TRAVAIL

Vous vous demandez peut-être, pourquoi ne pas prendre le programme par son début et le suivre dans le sens de son exécution ? SI c'est le cas, je m'empresse de satisfaire votre légitime curiosité : parce qu'il n'a pas été construit de cette manière. En assembleur, il est bien plus commode de commencer par les routines du niveau le plus bas. Par exemple, pour écrire à l'écran l'éternel 'BONJOUR', il vaut mieux commencer par étudier comment écrire un pixel, puis une lettre et enfin le mot. Voyons donc comment afficher cette fameuse flèche. Pour ce faire, nous allons exécuter pas à pas les instructions à partir de la ligne numéro 360.

360   LD    A,(COULEU)  ; A = %11110000 ( facile )
370   AND   C           ; Voyons l'effet de cette nouvelle instruction


INITIALISATION DES REGISTRES

Pour appeler la routine 'AFFLE', il faut lui passer un certain nombre de paramètres : deux dans les registres et un dans une variable. Le double registre 'HL' doit d'abord contenir l'adresse écran. Pour notre essai, mettons-y la première : '&C000'. Le registre 'C doit contenir le masque du pixel dans cette adresse. Pour comprendre l'utilité de ce masque, il faut se reporter à la leçon 5 du numéro 127 : codage des pixels. Le masque sert à isoler le pixel utile et à 'MASQUER' les trois autres (en mode 1, un octet contient 4 pixels). Supposons que le premier pixel soit celui tout à gauche dans la première adresse, la valeur de 'C sera %10001000, La variable 'COULEU', pour terminer, doit contenir le codage de la couleur pour les 4 pixels de l'adresse :

Couleur 1 = %11110000
Couleur 2 = %00001111
Couleur 3 = %11111111
HL = &HC000
C  = %10001000
COULEU = %11110000

Commençons notre exécution pas à pas :

AND registre = 'ET' logique d'un registre avec l'accumulateur. Le résultat va dans l'accumulateur. Pour comprendre l'effet de cette opération logique, pensez ceci :

POUR QUE LE RESULTAT D'UN BIT SOIT '1', IL FAUT QUE LES DEUX BITS DE L'OPERANDE ET DE L'ACCUMULATEUR SOIT A '1 '. SINON, LE RESULTAT DU BIT SERA '0',

Soit notre exemple :

A = %11110000
C = %10001000
Résultat: A = %10000000

Compris ?..

CPL   =   Complémentation   de l'accumulateur.

380  LD      D,A    ; A   =  %10000000      D   =   %10000000
390  LD      A,C    ; A   =  %10001000
400  CPL            ; Instruction nouvelle !

LA COMPLEMENTATION INVERSE TOUS LES BITS DE L'ACCUMULATEUR.

Soit notre exemple :

A = %10001000
Résultat: A = %01110111 Compris?..

410   LD     E, A ; %0110111

Avant de poursuivre, il faut comprendre ce que nous venons de faire : nous avons préparé les registres pour la suite. 'E' = Masque pour mettre à zéro le pixel concerné. Effectivement, les deux bits à zéro sont bien ceux qui codent le pixel de gauche de l'adresse écran. D = Masque de la couleur du pixel concerné.

Je ne saurais trop vous conseiller de suivre cette exécution pas à pas â l'aide d'un moniteur. Ainsi, à chaque Instruction, vous voyez directement son effet dans la modification des registres. Prenez même de l'avance d'ici au mois prochain. Quand vous aurez compris le principe des instructions Z80, tout ira très, très vite !..

Hebdogiciel n°155 , Patrick DUBLANCHET

★ LICENCE: COMMERCIALE
★ ANNÉES: 1985
★ AUTEUR: Patrick Dublanchet

Page précédente : La page pédagogique d'hebdogiciel 146: Creation d'Une Routine
★ AMSTRAD CPC ★ DOWNLOAD ★

Files:
» Amsoft_devpacDATE: 2013-09-03
DL: 574 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS-CPMDATE: 2013-09-03
DL: 179 fois
TYPE: ZIP
SIZE: 18Ko

» damspackDATE: 2013-09-03
DL: 386 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS_6128__FRENCHDATE: 2015-07-09
DL: 50 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_Converter_v1.1DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 25Ko

» Dams_notice_FRDATE: 2002-11-15
DL: 361 fois
TYPE: ZIP
SIZE: 18Ko

» DAMS_Overdrive_v1.0DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_OVL__ROMDATE: 2002-12-02
DL: 448 fois
TYPE: ZIP
SIZE: 21Ko

» DAMS_v1.2__(Include_Manual).zipDATE: 2015-05-07
DL: 138 fois
TYPE: ZIP
SIZE: 49Ko

» DAMS__(Keypad_patched_version)DATE: 2013-09-03
DL: 271 fois
TYPE: ZIP
SIZE: 37Ko

» Hisoft_Devpac80_v.2__ENGLISHDATE: 2013-09-03
DL: 470 fois
TYPE: ZIP
SIZE: 447Ko

» Hisoft_Devpac_ROMDATE: 2012-09-19
DL: 423 fois
TYPE: ZIP
SIZE: 12Ko

» Hisoft_Devpac__ENGLISHDATE: 2013-09-03
DL: 435 fois
TYPE: ZIP
SIZE: 85Ko

» RSX-Fast_Arrow__(Include_DEVPAC_SRC)__FRENCHDATE: 2015-07-28
DL: 58 fois
TYPE: ZIP
SIZE: 39Ko

» Zenith_2_DecompacterDATE: 2013-09-03
DL: 354 fois
TYPE: ZIP
SIZE: 26Ko

» ZENSUREN__GERMANDATE: 2013-09-03
DL: 323 fois
TYPE: ZIP
SIZE: 24Ko

» Zen__FRENCHDATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

Adverts/Publicités:
» Hisoft-Devpac80DATE: 2014-05-05
DL: 175 fois
TYPE: image
SIZE: 116Ko

» Hisoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 154 fois
TYPE: image
SIZE: 238Ko

» Hisoft-Happy_New_Year_from_Hisoft-Pascal80-C_Plus_Plus-Devpac80-The_Knife-Catalog-Your_Health-Your_Horoscope__ENGLISHDATE: 2014-12-26
DL: 76 fois
TYPE: image
SIZE: 307Ko

» Hisoft-Pascal_4T-Devpac_3DATE: 2015-01-08
DL: 181 fois
TYPE: image
SIZE: 189Ko

» Zenith_Software-Z-PackDATE: 2015-01-08
DL: 118 fois
TYPE: image
SIZE: 61Ko

Covers:
» Amsoft-HiSoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 157 fois
TYPE: image
SIZE: 274Ko

» Hisoft_Devpac__(Release_TAPE)__SPANISHDATE: 2014-05-05
DL: 186 fois
TYPE: image
SIZE: 418Ko
 

Medias/Supports de stockage:
» Devpac__(Release_DISC-AMSOFT)__ENGLISHDATE: 2016-06-21
DL: 22 fois
TYPE: image
SIZE: 14Ko
NOTE: Uploaded by hERMOL ; w310*h374

» Hisoft_Devpac__(Release_AMSOFT-TAPE)__ENGLISHDATE: 2015-11-11
DL: 23 fois
TYPE: image
SIZE: 100Ko
NOTE: Scan by Loic DANEELS ; w594*h739

» ZEN_Assembler__(Release_TAPE)__ENGLISHDATE: 2015-11-11
DL: 36 fois
TYPE: image
SIZE: 95Ko
NOTE: Scan by Loic DANEELS ; w594*h737

Manuels d'utilisation:
» DAMS__(Manuel_d_utilisation-OCR_by_DRILL)__FRENCHDATE: 2014-05-05
DL: 315 fois
TYPE: PDF
SIZE: 330Ko

» HiSoft-Devpac__(Licence_Statement)__ENGLISHDATE: 2014-05-05
DL: 184 fois
TYPE: image
SIZE: 295Ko

» HiSoft_Devpac_Programmers_Manual__ENGLISHDATE: 2014-05-05
DL: 467 fois
TYPE: PDF
SIZE: 2083Ko

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » La page pédagogique d'hebdogiciel 127: La Memoire
» Coding » La page pédagogique d'hebdogiciel 117 - Registres et Adressage
» Coding » La page pédagogique d'hebdogiciel 082: Generalite sur les Routines
» Coding » La page pédagogique d'hebdogiciel 116: Registres et adressage
» Coding » La page pédagogique d'hebdogiciel 087: Formation à l'assembleur
» Coding » La page pédagogique d'hebdogiciel 131: Les Instruction de Transfert

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 081 millisecondes et consultée 577 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.