Blog ENI : Toute la veille numérique !
Jusqu'à ce soir ! : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Le langage assembleur
  3. Ressources matérielles
Extrait - Le langage assembleur Maîtrisez le code des processeurs de la famille X86
Extraits du livre
Le langage assembleur Maîtrisez le code des processeurs de la famille X86 Revenir à la page d'achat du livre

Ressources matérielles

Le clavier

Le clavier est LE périphérique indispensable, il est aussi important (si ce n’est plus) que l’écran, et permet d’envoyer des ordres à l’ordinateur, par le biais des touches.

La programmation du clavier obéit à une règle très simple, il faut juste lire les données issues du contrôleur clavier et les traiter pour en simplifier l’utilisation.

org 100h
@@:         ;étiquette de rebouclage
in al,60h   ;lire le scancode du clavier
cmp al,1    ;scancode de la touche échap
jne @b      ;si la touche n'est pas échap, reboucler
ret         ;sinon, sortir 

Ce petit exemple est le code minimal que doit fournir un programme sous DOS. Une fois compilé, il sera exécutable en tant que programme DOS, et un appui sur la touche [Echap] permet de sortir du programme.

1. Contrôleur clavier

a. Un peu d’histoire

Le contrôleur clavier est à l’origine un circuit intégré, le 8042, et était implanté sur la carte mère pour communiquer avec le clavier, qui lui-même était équipé du circuit 8242.

Ces deux circuits communiquent par le biais d’une liaison série, matérialisée par le cordon qui relie le clavier au PC.

De nos jours, le contrôleur 8042 est intégré dans le chipset, et le 8242 est émulé par le processeur présent sur les claviers.

Mais le fonctionnement reste identique au clavier original en raison de la norme relative aux claviers de type AT, XT et PS/2.

Ces trois normes couvrent tous les matériels standard équipant les compatibles PC, la norme AT est la plus ancienne, la norme XT est la première évolution, et la norme PS/2 en est la dernière.

Le clavier est constitué d’une matrice de touches, d’un contrôleur et de trois leds.

04EP01.png

Le contrôleur scrute la matrice dès que l’appui sur une touche est détecté.

Pour détecter l’appui d’une touche, les lignes de la matrice sont toutes rapportées sur une entrée du contrôleur via un OU logique (des diodes), ce qui évite d’avoir à scruter les touches en permanence, et économise ainsi le temps du contrôleur et aussi son énergie.

La scrutation consiste en l’application d’un signal...

Le contrôleur VGA

Avec le clavier, il est le périphérique indispensable. Sans lui, impossible de recevoir des messages lisibles sur l’écran de la part de la machine. Il reste évidement la possibilité de connecter une console de type minitel au port série, ou autre bricolage d’électronicien, mais cela reste très limité comparé ne serait-ce qu’à un simple affichage en mode texte 16 couleurs.

Le contrôleur VGA est présent sur tous les compatibles PC, même les dernières cartes vidéo avec 3D et GPU multiples contiennent un circuit compatible avec le contrôleur VGA énoncé ici. Que ce soit de manière matérielle directe ou par émulation.

Il existe cependant des exceptions pour les très vieilles machines, mais il n’y a plus lieu de s’en préoccuper car elles sont très rares.

Si votre PC est un modèle des années 90 ou plus récent, il aura un contrôleur compatible VGA contenu dans la carte graphique. Ce n’est pas forcément vrai pour les PC des années 80.

Le contrôleur VGA était à la base un circuit vidéo très simple de Motorola. Le MC6845, contrôleur CRT.

Il possède une dizaine de ports permettant d’accéder aux registres dont l’utilisation est assez compliquée.

En plus des ports, le contrôleur possède plus de 300 registres VGA, accessibles de manière séquentielle.

Parmi ces ports, seuls 4 seront abordés, car d’utilisation indispensable en pratique :

Ports DAC
  • 3C7h, registre d’adresse de lecture du DAC.

  • 3C8h, registre d’adresse d’écriture du DAC.

  • 3C9h, registre de données DAC.

Port VGA
  • 3DAh, le bit 3 contient le signal Vsync, indispensable pour un affichage fluide, sans parasites de transitions (flickers).

Le DAC (Digital to Analog Converter, convertisseur numérique/analogique) est le circuit chargé de la mise en forme des signaux R, V et B, qui seront envoyés vers l’écran de manière analogique, par le biais du connecteur VGA DB15.

Entendons par là qu’au lieu d’envoyer un signal composé de 0 et de 1 (signal numérique), le contrôleur CRT envoie des niveaux de courant compris entre deux valeurs minimale...

La souris

La souris quant à elle, en raison de la nature historique du périphérique, nécessite l’installation d’un pilote. La souris existe sous trois formes : série (par le port COM), PS/2 et USB.

La souris USB, nécessitant un pilote de bus USB rarement standard, ne sera pas abordée. Toutefois, sur les PC récents, la souris USB émule une souris PS/2, et tout se passera comme si l’on avait une souris PS/2. Un pilote USB ne sera nécessaire que sur les vieilles machines, et il y aura lieu de vérifier la présence d’une émulation lors de tests.

La souris PS/2 partage les ports du clavier mais possède une ligne d’interruption différente, permettant de différencier les données issues du clavier de celles de la souris.

Évidemment, une souris connectée à un port série n’obéit pas à cette règle et passe par l’UART pour être contrôlée.

1. Fonctionnement

Lors d’un évènement sur la souris (clic, mouvement du pointeur...), il y a émission d’une trame d’octets sur le port correspondant.

Un évènement peut être un clic ou un déplacement.

La souris se déplace sur deux axes, X et Y. L’axe X correspond à un mouvement de gauche à droite, l’axe Y de haut en bas.

04EP06.png

Déplacements et boutons de la souris

Les molettes permettent d’ordonner le défilement de manière intuitive, leur emplacement permet de les manipuler sans avoir à les chercher.

Il existe deux types de molettes, verticale et horizontale.

La molette verticale est très courante, et est présente sur pratiquement toutes les souris du commerce.

La molette horizontale est déjà plus rare, et bien qu’elle soit émulée par le touchpad, rares sont ceux qui utilisent le défilement horizontal.

D’ailleurs, en évoquant le touchpad, il faut préciser que ce périphérique est une souris assez particulière, car possédant des capacités peu communes telles que le défilement en cercle, le zoom à deux doigts, le défilement en bordure, et ses capacités sont principalement gérées par le fabricant Synaptic : la documentation à ce sujet...

Le PIT (Timer)

Dans un ordinateur, il faut parfois traiter des événements en fonction du temps.

Le composant utilisé pour le découpage temporel est le PIT, Programmable Interval Timer (Temporisateur d’intervalles programmable).

L’utilisation du timer se fait via la requête d’interruption IRQ 0, en mode réel elle est traitée par l’interruption INT 8 par défaut.

Le PIT décrémente 3 compteurs indépendants en permanence, à la fréquence de 1,193182 MHz.

Le timer 0 utilisé en timer système, et d’une fréquence de 18,2 Hz par défaut, génère une interruption en fin de cycle de comptage et incrémente le compteur de ticks sur 32 bits dans la BDA, dword[40h:6Ch]. Il est mis à 0 à minuit.

Le timer 1 auparavant utilisé pour le rafraîchissement de la mémoire n’est plus utilisé de nos jours, et peut très bien ne pas exister du tout sur votre machine.

Le timer 2 est utilisé pour émettre un son par le haut-parleur système.

Seuls les timers 0 et 2 seront abordés.

1. Ports du timer

Le PIT se programme par le biais des ports 40h à 43h.

Ports du PIT

Port

Fonction

Écriture

Lecture

40h

Port de données du timer 0

Oui

Oui

41h

Port de données du timer 1

Oui

Oui

42h

Port de données du timer 2

Oui

Oui

43h

Registre de mode et de commande

Oui

Ignoré

Le registre 43h est utilisé pour programmer les canaux du PIT, et est composé de plusieurs champs :

Port 43h, registre de commande

Bit(s)

Utilisation

0

Base de comptage

Valeur

Fonction

0

Binaire 16 bits

1

BCD 4 chiffres

1 à 3

Mode d’opération

Valeur

Fonction

0

Mode 0, un cycle, interruption en fin de comptage

1

Mode 1, un cycle, réarmable

2

Mode 2, générateur d’impulsion

3

Mode 3, générateur de signal carré

4

Mode 4, déclenchement logiciel

5

Mode 5, déclenchement matériel

6

Mode 2

7

Mode 3

4 et 5

Mode d’accès

Valeur

Fonction

0

Verrouiller la valeur du compteur

1

Accéder uniquement le LSB du compteur

2

Accéder uniquement le MSB du compteur

3

Accéder les deux octets du compteur

6 et 7

Canal sélectionné

Valeur

Fonction

0

Compteur 0

1

Compteur 1

2

Compteur 2

3

Lire la commande en cours

2. Programmation

Pour utiliser...

L’horloge temps réel

L’horloge temps réel fait partie du CMOS.

Le CMOS tient son nom des transistors le constituant, Complementary Metal Oxyde Semiconductor.

La RAM du CMOS est un composant système chargé de conserver les paramètres du BIOS et le temps réel. Le CMOS est alimenté en permanence, même lorsque la carte mère est stockée dans sa boîte, tant que la pile de sauvegarde est connectée et fonctionnelle.

Les accès au CMOS se font via les ports 70h et 71h.

La procédure pour écrire ou lire le CMOS est la suivante :

  • Envoyer l’adresse du registre CMOS sur le port 70h.

  • Effectuer la lecture ou l’écriture du registre sur le port 71h.

L’horloge temps réel du CMOS permet de compter les heures et les jours fidèlement au calendrier grégorien, le compte des années bissextiles est automatique.

Liste des 64 registres CMOS standard :

Les 15 premiers registres sont relatifs à l’horloge temps réel, les suivants sont relatifs au BIOS.

Adresse du registre

Description

Partie relative à l’horloge temps réel

0

Secondes de la RTC

1

Secondes de l’alarme de la RTC

2

Minutes de la RTC

3

Minutes de l’alarme de la RTC

4

Heures de la RTC

5

Heures de l’alarme de la RTC

6

Jour de la semaine de la RTC

7

Jour du mois de la RTC

8

Mois de la RTC

9

Année de la RTC

0A

Registre de statut A de la RTC

0B

Registre de statut B de la RTC

0C

Registre de statut C de la RTC

0D

Registre de statut D de la RTC

Partie relative au BIOS

0E

Octet de statut du diagnostic

0F

Octet de statut de l’alimentation

10

Types de disquettes pour les lecteurs A: et B:

11

Réservé

12

Type de lecteur de disques pour les disques 0 et 1

13

Réservé

14

Octet de l’équipement

15

LSB

Nombre de blocs de 1024 octets détectés en RAM

16

MSB

17

LSB

Mémoire étendue en blocs de 1024 octets au-dessus de 1 mégaoctet

18

MSB

19

Octet de l’extension du disque C:

1A

Octet de l’extension du disque D:

1B - 2D

Réservés

2E

MSB

Somme de contrôle (checksum) des octets 10h à 20h

2F

LSB

30 - 3F

Réservés pour le BIOS

L’application la plus simple est la lecture de l’horloge du CMOS.

Lire_heure_RTC:
.heure:
      mov al,4
      out 70h,al
      in al,71h         ;lire les heures
      mov [RTCheure],al
.minute:...

Le contrôleur d’interruptions programmable (PIC)

Une interruption se produit lorsque le CPU effectue une tâche puis qu’un événement important devant être traité immédiatement arrive. Ceci engendre une interruption temporaire de la tâche en cours pour traiter l’événement, et enfin le retour à la tâche précédemment interrompue.

Le périphérique responsable de cet événement le signale au contrôleur d’interruptions, qui à son tour effectue un prétraitement des priorités et des permissions avant d’envoyer l’ordre au CPU.

Le contrôleur d’interruptions programmable est un périphérique système de base intimement lié aux CPU de la famille x86. C’est le périphérique central qui sert de pont entre le PC et le matériel, il permet de gérer les interruptions. Il est présent depuis le 8086 et permet de gérer les événements asynchrones.

Ces événements sont appelés requêtes d’interruptions (IRQ, Interrupt ReQuest).

Le CPU reçoit les signaux de ce contrôleur sur des broches dédiées aux interruptions.

Il y a deux contrôleurs dans un PC, un maître et un esclave. Le maître gère les 8 interruptions IRQ 0 à 7, et l’esclave gère les 8 autres, de IRQ 8 à 15. Une des interruptions du maître est utilisée pour gérer l’esclave.

04EP07.png

Lors d’une interruption, le contrôleur reçoit l’événement sur la ligne correspondante, avant de la rediriger vers le CPU qui interrompt l’exécution en cours (hors interruption de plus forte priorité), sauve son contexte sur la pile, puis charge le pointeur correspondant à l’interruption.

La priorité des interruptions est déterminée par la connexion avec le PIT.

La première ligne du contrôleur maître est l’interruption la plus prioritaire, la dernière ligne est l’interruption la moins prioritaire, les interruptions de l’esclave ont une priorité intermédiaire et suivent la même règle que sur le contrôleur maître.

Par exemple, le clavier est lié à IRQ1, le timer...

Le contrôleur de disques durs

Les disques durs existent en PATA et SATA. ATA correspond à l’acronyme de la norme ATA (Advanced Technology Attachement) couvrant divers domaines de l’informatique et des télécommunications, dont les disques durs et les lecteurs optiques.

Le type PATA (Parallel ATA) correspond aux disques d’ancienne génération, encore largement répandus et utilisés dans presque tous les équipements nécessitant le stockage de gros paquets de données.

Le bus d’un disque PATA (IDE) comporte 40 pistes conductrices, dont 16 pour les données.

Le type SATA (Serial ATA) correspond aux disques de nouvelle génération, et bien malheureusement le standard SATA n’est pas respecté par les fabricants, et la plupart des documentations ne sont pas diffusées. Certains BIOS émulent les contrôleurs PATA à partir du contrôleur SATA.

Bien que connectés sur les nappes IDE, les lecteurs optiques utilisent un protocole de communication différent, le protocole SCSI, émulé par la norme ATAPI.

Sur un PC standard, il y a TOUJOURS deux contrôleurs de disques durs PATA, correspondant aux deux connecteurs IDE présents sur les cartes mères.

1. Géométrie des disques durs

04EP08.png

Les disques durs sont des périphériques de type bloc. C’est-à-dire qu’ils communiquent avec des flux de données.

Les données sur les disques durs sont organisées en secteurs. Il y a 512 octets par secteur (le plus souvent).

a. CHS

L’adressage des secteurs sur les anciens disques est le CHS (Cylinder / Head / Sector, ou Cylindre / Tête / Secteur).

La géométrie CHS organise les secteurs de manière à ce qu’il y ait :

  • S secteurs par tête de lecture (face de plateau), encodés sur 8 bits.

  • T têtes de lecture pour le disque (totalité du volume), encodées sur 6 bits.

  • C cylindres, ou pistes concentriques, couvrant tous les plateaux, encodés sur 10 bits.

C/H/S max = 1024 / 63 / 255, soit environ 16 millions de secteurs, limitant le volume d’un disque CHS à 8 gigaoctets.

  • Les secteurs sont encodés de 1 à Smax.

  • Les têtes sont encodées de 0 à Tmax-1.

  • Les cylindres sont encodés de 0 à Cmax-1.

La géométrie...

Les ports de communications

Les communications sont l’une des principales raisons d’être des compatibles PC (ça et la gestion de gros paquets de données), qui sont donc les domaines à privilégier pour un apprentissage de cette technologie.

Pour des raisons d’ordre technique et de standardisation, nous n’aborderons que les deux types de communications qui, bien que rudimentaires et de moins en moins utilisés, restent présents sur les cartes mère du commerce, même si les fabricants de périphériques sont tous passés aux normes plus récentes telles que l’USB.

La raison pour laquelle les communications USB et Ethernet ne sont pas abordées est principalement d’ordre documentaire, due au fait que les matériels chargés de ces liaisons sont très rarement standard, et surtout très insuffisamment documentées, la plupart des fabricants ne voulant pas ouvrir leurs spécifications au public. Il devient impossible de garantir une quelconque marche à suivre générale pour leur utilisation. Pour les exploiter, il y a lieu d’utiliser les pilotes du système hôte.

Donc, il existe deux types de communication électronique, parallèle et série.

1. Port parallèle

Ce type de communication passe par le port LPT (ou port imprimante).

Les bits constituant l’information sont envoyés sur un fil chacun, comme sur un bus.

Sur le port LPT, les données sont transportées sur un bus de 8 bits, de manière synchronisée par le biais d’un ensemble de signaux de validation.

Les niveaux de tensions de ce port sont 0 volts pour un 0 logique, et 5 volts pour un 1 logique.

Ces niveaux de tension sont compatibles avec le standard TTL (Transistor to Transistor Logic).

D’autres ports sont en mode parallèle, mais restent internes aux PC, les ports ISA, PCI, AGP...

a. Interface matérielle du port LPT

04EP09.png

Brochage du connecteur du port LPT

Les broches GND signifient niveau de référence électrique 0 volt, ou masse.

Les signaux D0 à D7 composent l’octet D, directement lié au port 378h.

Lorsque l’on fait l’opération :

mov dx,378h
mov al,1
out dx,al 

Les broches D sont directement pilotées de sorte que le signal D0 est à 1 (5 volts) et les autres...

Ressources matérielles non standard

Il existe des normes pour presque toutes les catégories de matériels PC.

Les parties essentielles tout du moins, clavier, souris, écran, disques, etc.

MAIS...

Il arrive très souvent que du matériel ne soit pas du tout standard au niveau de la programmation, ce qui induit le besoin d’une documentation précise relative à ce matériel.

La plupart de ces matériels n’ont de pilotes que pour un seul type de système d’exploitation, leur documentation est introuvable, ou tout simplement fermée. C’est le cas du fabricant de cartes son CREATIVE®, des cartes graphiques ATI® ou des contrôleurs de disques SATA.

Ce qui rend très difficiles la programmation et l’utilisation de ces périphériques sous d’autres systèmes que Windows.

Linux fournit une bonne alternative à Windows, car il possède une base de pilotes assez complète en raison d’une utilisation dans le monde professionnel ayant induit l’écriture de ces pilotes par des entreprises et des milliers de programmeurs autour du monde.

Bien que SoundBlaster® soit une sorte de norme suivie par beaucoup de fabricants, Creative® n’a jamais rendu libre la diffusion de la documentation pour ses cartes son. C’est pourquoi cette « norme » n’est pas abordée dans...