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

La page pédagogique d'hebdogiciel 123: La MémoireCoding Hebdogiciel

PLUS QUE LA MÉMOIRE

Avec ce coure, nous allons terminer la partie purement théorique de cet apprentissage. Après avoir vu les numérotations binaires et hexadécimales, la structure du 280 et. aujourd'hui, la mémoire de l'Amstrad, vous serez fin prêt pour commencer à créer de petits programmes en assembleur qui vous laisseront cois d'admiration. Alors, encore un peut effort, suivez le guide et dites-vous bien que si vous ne comprenez pas tout ce n'est pas grave ! (Moi-même, au début...)

LA MÉMOIRE D'ÉLÉPHANT

Souvenez-vous d'une chose très importante : un microprocesseur 8 bits ne peut adresser que 64 Ko, soft 65536 cases mémoire numérotées de $0000 à $FFFF. Et, tant que j'y suis, je rappellerai pourquoi : une adresse mémoire, tient sur deux octets, soit 16 bits et, avec 16 bits, on peut compter de &X0 à &X1111111111111111, soft de 0 à 65535. Mais alors, comment l'Amstrad peut-il avoir 64 Ko de RAM plus 32 Ko de ROM, sans parler du 6128 qui, lui, a carrément 128 Ko de AM ? En créant tout simplement plusieurs banquet de mémoire :


SCHÉMA 1

Nous allons nous intéresser principalement à celle-ci. Toute la RAM des ordinateurs 464 et 664 est contenue dans cette banque. Chaque banque est divisée en 4 blocs de 16 Ko chacun. Voyons-les un par un :

BLOC 1 : de $0000 à 3FFF. Ce bloc est en parallèle avec la ROM du système d'exploitation (banque numéro 2), ce qui vaut dire que le basic ne peut à la lois faire appel à une routine de la ROM et accéder à la RAM : il doit choisir. Afin de simplifier ce travail, le contenu de la ROM allant de l'adresse $0000 à $003F est copié dans la RAM lors de l'initialisatIon de la machine. En clair, il ne faut pas toucher a ces adresses (sauf al vous voulez voir déconner un ordinateur à fond la caisse : faites alors POKE &38,0 , par exemple et amusez-vous bien ! ). partir de l'adresse $0170 commence l'implantation de votre programme basic, Jusqu'à HIMEM.

BLOC 2 : de $4000 à  $7FFF. Ce bloc fait partie de la RAM centrale, ce qui veut dire qu'il n'a pas de ROM en parallèle avec lui. Votre programme basic continue son implantation dans ce bloc. Autre caractéristique Importante : Il peut servir aussi de mémoire écran.

BLOC 3 : de $8000 à $BFFF. Suite et fin de votre programme basic, jusqu'à HIMEM (variable basic qui indique l'adresse du dernier octet de l'espace disponible pour le basic). Pour la connaître, tapez PRINT HEX$(HIMEM). Au-dessus de HIMEM se trouvent d'abord les caractères redéfinis par l'utilisateur. ensuite les variables système, puis les adresses de branchement en ROM du bas et, pour terminer, la pile, Attendez un peu, je vais détailler. Les caractères redéfinis par l'utilisateur, vous savez ce que c'est : SYMBOL AFTER. SYMBOL; vous connaissez. Les variables système sont exactement ce que leur nom indique : des variables système d'exploitation. Elles servent à mémoriser le mode écran, les couleurs, le ligne basic en cours d'exécution et bien d'autres choses encore... Les adresses de branchement , encore appelées bloc de saut, ont des adresses qui permettent d'appeler des routines du système d'exploitation, en étant certain de tomber en ROM et non pat en RAM.

Exemple : la routine qui teste si une touche a été frappée, dans le 464, se trouve â l'adresse $1A3C, mais si vous faites CALL &1A3C vous appelez la RAM. En revanche, si vous faites CALL &BB06, voua appelez la ROM. Pourquoi ? Parce qu a cette adresse une petite routine s'occupe de brancher votre appel sur la ROM. C'est ainsi que les principales routines du système d'exploitation sont appelées par une adresse de branchement. Enfin, tout en haut de ce bloc se trouve l'emplacement réservé à la pile. La pile est une zone qui permet de stocker provisoirement des adresses et des valeurs. Nous aurons l'occasion d'en reparler de manière beaucoup plus approfondie.

BLOC 4 : de $C000 à $FFFF. Ce bloc est la mémoire écran, qu'il faudra très bien connaître. C'est pour cette raison que nous allons l'étudier en détail : 50 fois par seconde le contenu de ce bloc est affiché sur votre moniteur. Si vous modifiez une adresse de ce bloc, vous verrez immédiatement un changement sur votre écran. Tapez :

10 MODE 1
20 FOR  I= &C000 TO &FFFF :POKE 1,255:NEXT

Vous remarquerez que votre écran se remplit petit à petit d'une couleur. en commençant en haut et à gauche. Pourtant, quand la première ligne est terminée, il ne passe pas à la ligne suivante mais huit lignes plus bas. Puis, quand il atteint le bas, il recommence è partir de la deuxième ligne, et ainsi de suite jusqu'à avoir rempli 25 fois 8 lignes. Voici un plan un peu plus précis de cette configuration un peu particulière:


SCHÉMA 2

L'écran prend donc 80 octets de large sur 200 octets de haut. Or 200x80=16000. mais 16 Ko font 16384 octets ! Où sont donc passés les 384 octets manquant à l'appel ? Ils se cachent en attendant que l'on ait besoin d'eux. Et ce besoin arrive fors d'un scrolling. Explication : il y a une possibilité de changer l'adresse début de l'écran, ce qui permet de faire des scrollings très rapides. Pour aujourd'hui, laissons notre écran dans la configuration du schéma précédent.

COMMENT EST CODÉ UN OCTET ECRAN

L'écran prend toujours 80 octets de large, quel que soit le mode. Or chaque mode a son propre nombre de pixels en largeur, voici comment il se tait :

MODE 0 = 160 PIXELS  = 160/80 = 2 PIXELS PAR OCTET
MODE 1 = 320 PIXELS  = 320/80 = 4 PIXELS PAR OCTET
MODE 2 = 640 PIXELS  = 640/80 = 8 PIXELS PAR OCTET

Le plus facile à comprendre, c'est le mode 2, puisqu'un octet fait huit bits et qu'il y a huit pixels. Un bit code donc un pixel. Pour le mode 1, deux bits codent un pixel, ce qui permet te choix entre quatre couleurs. Quant au mode 0, il faut quatre bits pour coder un pixel, ce qui noua donne seize couleurs ! Comment les couleurs sont-elles codées dans chaque mode ? Vous le saurez si vous suivez attentivement le prochain épisode de notre passionnant roman-feuilleton !

RÉCRÉATION

Listing 1

10 MODE 1
20 FOR I=1 TO 125:PRINT "SALUT ";:NEXT
30 FOR I=&28 TO 1 STEP -1
40 OUT &BC00,1
50 OUT &BD00,I
60 FOR J=1 TO 20:NEXT
70 NEXT
80 CLS
90 OUT &BC00,1:OUT &BD00,128

Hebdogiciel n°123 , 21 Février 1986 , Patrick Dublanchet

★ LICENCE: COMMERCIALE
★ ANNÉE: 1986
★ AUTEUR: Patrick Dublanchet

Page précédente : La page pédagogique d'hebdogiciel 120: Le Pointeur SP

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