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: 605 fois
TYPE: ZIP
SIZE: 47Ko
NOTE: 40 Cyls
.HFE: OUI

» DAMS-CPMDATE: 2013-09-03
DL: 201 fois
TYPE: ZIP
SIZE: 18Ko
NOTE: 40 Cyls
.HFE: OUI

» damspackDATE: 2013-09-03
DL: 403 fois
TYPE: ZIP
SIZE: 47Ko
NOTE: 40 Cyls
.HFE: OUI

» DAMS  6128    FRENCHDATE: 2015-07-09
DL: 60 fois
TYPE: ZIP
SIZE: 39Ko
NOTE: 40 Cyls
.HFE: OUI

» DAMS  Converter  v1.1DATE: 2013-09-03
DL: 392 fois
TYPE: ZIP
SIZE: 25Ko
NOTE: 42 Cyls
.HFE: OUI

» Dams  notice  FRDATE: 2002-11-15
DL: 381 fois
TYPE: ZIP
SIZE: 18Ko

» DAMS  Overdrive  v1.0DATE: 2013-09-03
DL: 377 fois
TYPE: ZIP
SIZE: 39Ko
NOTE: 42 Cyls
.HFE: OUI

» DAMS  OVL    ROMDATE: 2002-12-02
DL: 465 fois
TYPE: ZIP
SIZE: 21Ko

» DAMS  v1.2    (Incl.  Manual)    FRENCHDATE: 2015-05-07
DL: 179 fois
TYPE: ZIP
SIZE: 49Ko
NOTE: 40 Cyls
.HFE: OUI

» DAMS    (Keypad  patched  version)DATE: 2013-09-03
DL: 301 fois
TYPE: ZIP
SIZE: 37Ko
NOTE: 40 Cyls
.HFE: OUI

» Hisoft  Devpac80  v.2    ENGLISHDATE: 2013-09-03
DL: 499 fois
TYPE: ZIP
SIZE: 447Ko
NOTE: 41 Cyls
.HFE: OUI

» Hisoft  Devpac  ROMDATE: 2012-09-19
DL: 443 fois
TYPE: ZIP
SIZE: 12Ko
NOTE:
.HFE: NON

» Hisoft  Devpac    ENGLISHDATE: 2013-09-03
DL: 467 fois
TYPE: ZIP
SIZE: 85Ko
NOTE: 43 Cyls
.HFE: OUI

» RSX-Fast  Arrow    (Include  DEVPAC  SRC)    FRENCHDATE: 2015-07-28
DL: 68 fois
TYPE: ZIP
SIZE: 39Ko
NOTE: 40 Cyls
.HFE: OUI

» Zenith  2  DecompacterDATE: 2013-09-03
DL: 368 fois
TYPE: ZIP
SIZE: 26Ko
NOTE: 40 Cyls
.HFE: OUI

» ZENSUREN    GERMANDATE: 2013-09-03
DL: 332 fois
TYPE: ZIP
SIZE: 24Ko
NOTE: 40 Cyls
.HFE: OUI

» Zen    FRENCHDATE: 2013-09-03
DL: 401 fois
TYPE: ZIP
SIZE: 39Ko
NOTE: 40 Cyls
.HFE: OUI

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

» Hisoft-Devpac    ENGLISHDATE: 2015-01-08
DL: 218 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: 187 fois
TYPE: image
SIZE: 307Ko

» Hisoft-Pascal  4T-Devpac  3DATE: 2015-01-08
DL: 251 fois
TYPE: image
SIZE: 189Ko

» Zenith  Software-Z-PackDATE: 2015-01-08
DL: 157 fois
TYPE: image
SIZE: 61Ko

Covers:
» Amsoft-HiSoft-Devpac    ENGLISHDATE: 2015-01-08
DL: 194 fois
TYPE: image
SIZE: 274Ko

» Hisoft  Devpac    (Release  TAPE)    SPANISHDATE: 2014-05-05
DL: 223 fois
TYPE: image
SIZE: 418Ko
 

Medias/Supports:
» Devpac    (Release  DISC-AMSOFT)    ENGLISHDATE: 2016-06-21
DL: 49 fois
TYPE: image
SIZE: 14Ko
NOTE: Uploaded by hERMOL ; w310*h374

» Devpac    (Release  TAPE-INDESCOMP)    SPANISHDATE: 2017-05-20
DL: 21 fois
TYPE: image
SIZE: 113Ko
NOTE: Uploaded by hERMOL ; w839*h581

» Devpac    (Release  TAPE-SCHNEIDER)    GERMANDATE: 2017-05-20
DL: 28 fois
TYPE: image
SIZE: 97Ko
NOTE: Uploaded by hERMOL ; w640*h774

» Hisoft  Devpac    (Release  AMSOFT-TAPE)    ENGLISHDATE: 2015-11-11
DL: 57 fois
TYPE: image
SIZE: 100Ko
NOTE: Scan by Loic DANEELS ; w594*h739

» ZEN  Assembler    (Release  TAPE)    ENGLISHDATE: 2015-11-11
DL: 69 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: 394 fois
TYPE: PDF
SIZE: 330Ko

» HiSoft-Devpac    (Licence  Statement)    ENGLISHDATE: 2014-05-05
DL: 231 fois
TYPE: image
SIZE: 295Ko

» HiSoft  Devpac  Programmers  Manual    ENGLISHDATE: 2014-05-05
DL: 486 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 084: Formation à l'assembleur - La Pile
» Coding » La page pédagogique d'hebdogiciel 115 : Formation à l'assembleur - Logique ou Arithmetiques
» Coding » La page pédagogique d'hebdogiciel 120: Le Pointeur SP
» Coding » La page pédagogique d'hebdogiciel 116: Registres et adressage
» Coding » La page pédagogique d'hebdogiciel 119: Registres et Adressage
» Coding » La page pédagogique d'hebdogiciel 155: Adressage

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 089 millisecondes et consultée 743 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.