| Spécification | Description |
|---|---|
| Fabricant | IBM |
| Date de conception | 1981 |
| RAM installé | 16 Ko |
| Puce | Motorola MC6845 |
Introduction
La carte vidéo MDA du fabricant IBM, tire son nom de l'abréviation de l'anglicisme Monochrome Display Adapter et la première carte monochrome proposé pour ses IBM PC. Elle a été conçu pour se connecter directement au moniteur IBM 5151 monochrome (vert phosphore). La carte était également livrée avec un port d'imprimante pour fonctionner avec les imprimantes IBM, elle était donc souvent appelée écran monochrome et adaptateur d'imprimante.
La carte était livrée avec 4 Ko de mémoire vidéo pour entreposer les attributs d'écran étant entreposés à l'adresse mémoire B0000 à B0FFF, plus une ROM de caractères de 8 Ko contenant les images d'un ensemble de caractères, bien que seulement 4 Ko aient été réellement utilisés. La carte était accessible via les ports d'entrée/sortie 3B0h à 3BF.
La norme MDA était destinée à être utilisée avec un moniteur à fréquence fixe, fournissant un format d'image 720x350 pixels, bien qu'elle ne soit capable de produire une sortie texte qu'à l'aide de son générateur de caractères basé sur ROM. Ces caractères étaient des "cellules" de 9x14 pixels, de sorte que le format d'image est plus précisément décrit comme 25 lignes de 80 caractères chacune. Cela était connu sous le nom de «mode 7» ou «mode 07h». L'ensemble de caractères n'était pas redéfinissable. Les cartes MDA vendues aux États-Unis contenaient ce qu'on appelait la page de codes 437 - il s'agissait de l'ensemble de caractères comprenant tous les caractères ASCII américains imprimables (32-126), les codes étendus pour les caractères accentués et certains dessins au trait. Pour les marchés étrangers, l'ensemble de caractères de la ROM a été modifié pour s'adapter aux caractères grecs, cyrilliques, hébreux et autres.
Il utilise une sortie TTL numérique, ce qui signifie qu'il déclenche soit un «haut» soit un «bas», où un «haut» allume le faisceau du CRT et un «bas» l'éteint pour créer les caractères. Une sortie "intensité" séparée est également fournie et peut être utilisée pour modifier la luminosité caractère par caractère.
Il fournit également un signal de synchronisation horizontale et verticale séparé - quelque chose qui est encore conservé dans les normes PC aujourd'hui. Ces signaux de synchronisation sont nécessaires pour que les moniteurs CRT et les téléviseurs indiquent la fréquence horizontale utilisée par la norme MDA est de 18,432 kHz.
La carte MDA pourrait vivre heureusement aux côtés d'une carte CGA, mais il est important de noter que la carte MDA peut endommager les moniteurs n'étant pas conçus pour prendre des signaux vidéo/synchronisation MDA tels que le moniteur IBM 5153 (CGA) et l'IBM moniteur 5154 (EGA). Lors de l'installation de différentes cartes d'affichage dans ces anciens PC, vous deviez généralement définir des "cavaliers" ou des commutateurs "DIP" sur la carte mère pour lui indiquer ce qui était installé. Généralement, dans un XT ou un clone, il y avait 8 commutateurs DIP en 4 paires. La troisième paire indiquait au système quelle carte d'affichage était installée : monochrome, CGA ou pas de vidéo du tout. Ce paramètre avait l'habitude de dérouter les gens, car pour les cartes d'affichage plus avancées (EGA et VGA), vous deviez désactiver les commutateurs de la carte mère. En fait, c'était plus logique qu'il n'y paraissait au début : le BIOS XT gérait lui-même les écrans mono et CGA, mais les cartes EGA et VGA avaient leur propre BIOS, vous deviez donc dire au BIOS intégré que vous n'aviez "pas de vidéo" afin de permettre à la carte d'extension EGA ou VGA d'avoir le contrôle.
Sur la carte MDA elle-même se trouvaient des cavaliers. J1 doit rester ouvert, J2 est pour un crayon lumineux en option, bien qu'IBM n'en ait jamais publié un lui-même. Si le support de la carte semble être trop grand pour votre système, c'est parce qu'il a été conçu pour l'IBM 5150 d'origine, ayant un espacement plus large entre les connecteurs d'extension.
Historique et caractéristiques
IBM proposait initialement deux familles d'affichage pour le PC :
- Color/Graphics Monitor Adapter (CGA), couleur et graphique 200 lignes;
- Monochrome Display and Printer Adapter (MDA), texte monochrome très net.
La MDA visait les traitements de texte, feuilles de calcul, terminaux et applications professionnelles. Sa cellule 9x14 et son moniteur à phosphore vert donnaient un texte plus lisible que les caracteres 8x8 de la CGA.
Caracteristiques de la carte IBM :
- carte ISA 8 bits pleine longueur;
- contrôleur CRT Motorola MC6845;
- 4 Kio de RAM vidéo sans parité;
- mémoire vidéo a B0000h;
- un seul mode standard : texte 80 colonnes x 25 lignes;
- matrice de cellule 9x14, image logique 720x350;
- 256 codes de caractères;
- ROM générateur de caractères de 8 Kio;
- attributs normal, intense, souligne, inverse et clignotant;
- sortie numérique TTL Vidéo+Intensity sur DE-9;
- moniteur IBM 5151, environ 18,432 kHz horizontal et 50 Hz vertical;
- interface parallèle/imprimante a 3BCh..3BEh, IRQ 7;
- aucun mode graphique IBM;
- aucun changement logiciel de police sur la carte originale.
Le nom complet inclut «Printer Adapter» parce que la carte offre un port parallèle complet. Dans les tables DOS/BIOS, ce port est historiquement LPT1 lorsqu'aucun autre port de base inférieure n'est configuré.
Architecture matérielle
Le MC6845 ne contient ni police de caractères ni RAM. Il fournit les compteurs de balayage, les adresses de cellules, le numéro de ligne raster, les synchros et le curseur. La logique discrète MDA lit simultanément le caractère et l'attribut, consulte la ROM, ajoute soulignement/inversion/intensité/clignotement, puis généré les sorties.
La RAM a deux chemins d'accès permet au processeur et a l'affichage de partager le tampon. IBM indique deux octets lus en environ 553 ns, soit environ 1,8 Mo/s. Les accès CPU sont synchronises au caractère et insèrent au moins un wait state.
La carte ne fournit pas de parité sur sa RAM vidéo. Une erreur vidéo ne déclenche donc pas le NMI de parité système.
Moniteur IBM 5151 et connecteur
Connecteur DE-9 femelle
| Broche | Signal MDA IBM |
|---|---|
| 1 | Masse |
| 2 | Masse |
| 3 | Non connectée |
| 4 | Non connectée |
| 5 | Non connectée |
| 6 | Haute intensité |
| 7 | Vidéo |
| 8 | Synchronisation horizontale |
| 9 | Synchronisation verticale active basse |
Il s'agit de niveaux TTL, pas de VGA analogique. Le même boîtier DE-9 est utilisé par CGA/EGA avec un brochage différent. Ne jamais relier un IBM 5151 a une CGA, une EGA ou un adaptateur inconnu en se fondant sur la forme du connecteur.
Niveaux visuels
| Vidéo | Intensité | Aspect sur 5151 typique |
|---|---|---|
| 0 | 0 | noir |
| 0 | 1 | vert très sombre ou noir selon réglage/moniteur |
| 1 | 0 | vert normal |
| 1 | 1 | vert brillant |
Des moniteurs compatibles emploient un phosphore ambre ou blanc. Les termes «vert» de cette page décrivent le 5151 original; les niveaux logiques restent vidéo et intensité.
Caractéristiques du 5151
Le 5151 est un CRT monochrome a phosphore P39, balayage fixe, environ 50 Hz. Il n'est pas multisynchronisation et ne possède pas les protections des moniteurs modernes contre tous les timings incorrects. Une mauvaise configuration de carte ou un signal CGA peut endommager le moniteur.
- Le manuel signale que la combinaison MDA/affichage P39 ne prend pas en charge un stylet lumineux. Le MC6845 possède des registres de stylet lumineux génériques, mais cela ne transforme pas l'ensemble IBM en interface stylet lumineux supportée.
Horloges et temporisations
Horloge de points MDA : approximativement 16,257 MHz. Une cellule fait neuf points, donnant une horloge caractère voisine de 1,806 MHz.
Temporisations standard :
- 80 caractères visibles par ligne;
- 98 temps caractères environ au total (R0=61h → 97+1);
- 25 rangées visibles;
- 14 lignes raster par caractère;
- 720 points visibles horizontalement;
- 350 lignes visibles;
- horizontal environ 18,432 kHz;
- vertical environ 50 Hz.
Le rapport d'aspect physique n'est pas déduit uniquement de 720/350. Le tube et les dimensions du 5151 déterminent la forme finale des points/caractères.
Le bit «high resolution» de 3B8h sélectionné la bonne horloge. Sur la carte IBM, le chemin de basse résolution n'a pas d'horloge normalement installée. Ce n'est donc pas un mode 40 colonnes utilisable.
Mémoire vidéo
Adresse et taille
La RAM physique fait 4096 octets et commence a B0000h :
- segment B000h, déplacements 0000h..0FFFh
Le décodage d'adresse de la carte IBM est incomplet. La même RAM se répète tous les 4 Kio dans B0000h..B7FFFh :
- B0000h, B1000h, B2000h, ... B7000h → memes 4096 octets physiques
Un logiciel portable utilise B000:0000. Une Hercules dispose souvent de 32 ou 64 Kio réels et ne reproduit pas nécessairement ces miroirs.
Organisation
Chaque cellule occupe deux octets :
| Déplacement | Description |
|---|---|
| offset pair | code de caractère |
| offset impair | attribut |
| offset = 2 * (ligne*80 + colonne) |
La page visible 80*25*2 utilise 4000 octets, laissant 96 octets jusqu'à 1000h.
Le BIOS annonce normalement une seule page utile en mode 07h. Les 4 Kio ne permettent pas deux pages complètes.
Exemple cellule colonne 10, ligne 3 :
| offset = 2*(3*80+10) = 01F4h |
Sur 8086 little-endian, un mot dont AL=caractère et AH=attribut peut être écrit directement a ES:[offset].
Cellules, caractères et police de caractères
Cellule 9x14
La ROM contient des glyphes de huit points. La cellule visible en fait neuf :
- pour la plupart des codes, neuvième colonne vide;
- pour C0h..DFh, neuvième colonne copie la huitième afin que les caractères de cadres CP437 se raccordent horizontalement.
Cette règle explique les cadres continus des interfaces DOS. Un émulateur qui met toujours la neuvième colonne a zéro crée des trous dans les traits.
La police normale utilise 14 lignes de cellule. Le dessin utile des lettres est souvent de l'ordre de 7x9, entoure d'espacement. Les valeurs exactes sont dans la ROM IBM et doivent être utilisées pour une émulation fidèle.
ROM 8 Kio
La ROM 9264 contient la police MDA 14 lignes et aussi des polices de caractères 8x8 partagées avec des conceptions CGA. Le MDA normal n'affiche pas ces polices de caractères 8x8. La ROM n'est pas cartographiée dans l'espace CPU et n'est pas modifiable par logiciel.
Pour changer de police sur la carte IBM, il faut remplacer/modifier le composant matériel. Les fonctions EGA/VGA INT 10h/AH=11h ne chargent pas une police de caractères MDA.
Ensemble de caractères
Les 256 codes de la ROM IBM correspondent au ensemble PC d'origine communément associe a la page de codes 437 : ASCII, lettres accentuées, symboles, blocs et dessin de cadres. Une page de codes DOS modifie surtout clavier/traduction; elle ne reprogramme pas la ROM MDA.
Attributs monochromes
L'attribut MDA n'est pas une palette couleur a 4+4 bits. La logique générale :
| Bits | Description |
|---|---|
| 0 à 2 | Valeur 1 (001b) demande le soulignement; autres = non souligne |
| 3 | Haute intensité du premier plan |
| 4 à 6 | Participent aux cas normal/inverse/noir particuliers |
| 7 | Clignotement si active; intensité du fond si clignotement désactivé |
Attributs usuels :
| Code | Description |
|---|---|
| 07h | Texte normal |
| 0Fh | Texte brillant |
| 01h | Texte souligne |
| 09h | Texte souligne brillant |
| 70h | Vidéo inversé, noir sur vert |
| 78h | Vidéo inversé avec niveau de premier plan sombre |
| 87h | Normal clignotant lorsque clignotement actif |
| 8Fh | Brillant clignotant |
| F0h | Inversé clignotant, ou fond brillant si clignotement inactif |
| F8h | Variante inverse/intensé |
Exceptions matérielles confirmées :
| Code | Description |
|---|---|
| 00h, 08h, 80h, 88h | Affichent un espace noir; |
| 70h | Noir sur vert; |
| 78h | Vert sombre sur vert, avec halo possible; |
| F0h/F8h | Clignotent si blink actif, sinon fond brillant. |
Le soulignement apparaît sur la ligne choisie par le CRTC, normalement près du bas de la cellule. Un attribut 01h souligne; 07h ne souligne pas, même si leurs trois bits bas sont tous non nuls. Implémenter `bits0..2 == 1`, pas `bit0 == 1`.
Quand 3B8h bit 5=1, bit 7 commande le clignotement. Quand il vaut 0, bit 7 peut produire un fond de haute intensité. Blink masque le premier plan pendant une phase mais ne modifie pas la RAM.
Ports vidéo
| Port | Accès | Fonction |
|---|---|---|
| 3B0h,3B2h,3B4h,3B6h | W | Index/adresse MC6845 (miroirs) |
| 3B1h,3B3h,3B5h,3B7h | R/W* | Données MC6845 (miroirs) |
| 3B8h | W | Contrôle du mode/sortie |
| 3BAh | R | État vidéo/retrace |
| 3BCh | R/W | Données port parallèle |
| 3BDh | R | État port parallèle |
| 3BEh | R/W | Contrôle port parallèle |
* La plupart des registres MC6845 sont en écriture seule; seuls certains sont lisibles. 3B4h/3B5h sont les adresses canoniques. Les miroirs résultent du décodage partiel de la carte IBM et peuvent manquer sur un clone.
3BBh et 3BFh n'ont pas la signification Hercules sur la MDA IBM. Un programme MDA ne doit pas écrire 3BFh pour « activer le graphique » : cette interface est une extension Hercules.
Registre de contrôle 3B8h
Registre en écriture seulement sur MDA IBM :
| Bits | Description |
|---|---|
| 0 | High Resolution Enable : doit être 1 |
| 1 | Valeur « noir et blanc » mémorisée mais sans effet visuel utile |
| 2 | Réservé |
| 3 | Video Enable : 1=affichage, 0=noir |
| 4 | Réservé |
| 5 | Blink Enable : 1=blink, 0=bit 7 d'attribut comme fond intense |
| 6 à 7 | Réservés |
Valeur BIOS habituelle du mode 07h : 29h (bits 0,3,5). Pour couper l'affichage en gardant horloge haute et blink : 21h. Pour une initialisation froide, IBM exige que la première commande a la carte soit :
Danger du bit 0
Sur la carte originale, bit 0=0 sélectionne une entrée d'horloge basse qui n'est pas normalement cablée. L'horloge synchronise aussi les wait states CPU. Un accès mémoire ou port ultérieur peut donc ne jamais terminer et bloquer le PC.
Un émulateur compatible simple peut ignorer cet effet pour éviter de geler la machine. Un profil IBM fidèle doit au moins enregistrer/diagnostiquer le cas et peut modeler le wait infini avec un mécanisme récupérable par reset.
Couper la vidéo
Mettre bit 3 à zéro pendant la reprogrammation CRTC réduit les parasites. Ne jamais couper aussi bit 0. Restaurer la valeur complète après programmation.
Registre d'état 3BAh
Sur une MDA IBM :
| Bits | Description |
|---|---|
| 0 | Retrace horizontal actif |
| 1 à 2 | Zéro |
| 3 | Pixel vidéo normal ou brillant actuellement émis |
| 4 à 7 | Un |
Ainsi les bits non définis donnent normalement F0h dans leur partie haute. Un clone peut retourner autre chose. Bit 3 n'est pas le retrace vertical : il suit le signal vidéo/pixel et dépend du contenu de l'écran.
Pour détecter une activité, observer des transitions du bit 0 avec dépassement de délai. Un écran rempli de noir peut laisser bit 3 inactif; ne pas l'utiliser seul comme horloge. Hercules attribue d'autres sens, notamment vertical sync au bit 7.
Motorola MC6845 et registres
Sélectionner un index a 3B4h puis lire/écrire 3B5h.
| Registres | Fonction | Unité |
|---|---|---|
| R0 | Horizontal Total | Caractères - 1 |
| R1 | Horizontal Displayed | Caractères |
| R2 | Horizontal Sync Position | Caractères |
| R3 | Horizontal Sync Width | Caractères |
| R4 | Vertical Total | Rangées - 1 |
| R5 | Vertical Total Adjust | Lignes raster |
| R6 | Vertical Displayed | Rangées |
| R7 | Vertical Sync Position | Rangées |
| R8 | Interlace Mode and Skew | Contrôle |
| R9 | Maximum Scan Line | Lignes par cellule - 1 |
| R10 | Cursor Start et mode | Ligne/contrôle |
| R11 | Cursor End | Ligne |
| R12 | Start Address High | Adresse CRTC |
| R13 | Start Address Low | Adresse CRTC |
| R14 | Cursor Address High | Adresse CRTC |
| R15 | Cursor Address Low | Adresse CRTC |
| R16 | Light Pen High | Lecture |
| R17 | Light Pen Low | Lecture |
R0 à R13 sont principalement en écriture seule; R14/R15 peuvent être lus/écrits; R16/R17 sont les captures light pen en lecture. Les variantes 6845 divergent : masquer les bits comme le composant IBM, pas comme un CRTC VGA.
Adresses CRTC en texte : une unité correspond a une cellule de deux octets.
|
offset_RAM = 2 * adresse_CRTC cursor = ligne*80 + colonne |
Programmation du CRTC
Table MDA IBM usuelle R0..R15 :
| 61 50 52 0F 19 06 19 19 02 0D 0B 0C 00 00 00 00 |
Interprétation principale :
| Registre/Valeur | Description |
|---|---|
| R0=61h | 98 temps caractères totaux |
| R1=50h | 80 affiches |
| R2=52h | synchro H a 82 |
| R3=0Fh | Largeur synchro H |
| R4=19h | Total vertical principal |
| R5=06h | Six lignes d'ajustement |
| R6=19h | 25 rangées affichées |
| R7=19h | Position synchro V |
| R9=0Dh | 14 lignes par cellule |
| R10=0Bh/R11=0Ch | Curseur de deux lignes près du bas |
Séquence :
- écrire 01h a 3B8h si initialisation froide;
- couper vidéo en conservant bit 0;
- écrire R0..R15 via 3B4h/3B5h;
- initialiser RAM et Start Address;
- activer 29h ou la variante blink voulue.
Des timings incorrects peuvent endommager ou désynchroniser un IBM 5151. Pour une application normale, utiliser INT 10h mode 07h.
BIOS INT 10h et mode 07h
Le mode BIOS MDA est 07h : texte monochrome 80x25.
Fonctions utiles :
| Fonction | Description |
|---|---|
| AH=00h AL=07h | Définir le mode |
| AH=01h | Forme curseur CH/CL |
| AH=02h | Position BH=page,DH=ligne,DL=colonne |
| AH=03h | Lire position/forme |
| AH=05h | Page active (une page matérielle utile sur MDA) |
| AH=06h/07h | Défiler une fenêtre |
| AH=08h | Lire caractère et attribut |
| AH=09h | Écrire caractère+attribut CX fois |
| AH=0Ah | Écrire caractère sans changer attribut |
| AH=0Eh | Télétype |
| AH=0Fh | Lire mode/colonnes/page |
AH=0Ch/0Dh de lecture/écriture pixel ne fournissent pas un graphique MDA. Les fonctions palette EGA/VGA n'ajoutent aucune couleur a la carte originale.
La BIOS Data Area contient notamment :
| Adresse | Description |
|---|---|
| 0040:0049 | Mode courant, 07h |
| 0040:004A | Colonnes, 80 |
| 0040:004C | Taille de page |
| 0040:004E | Adresse de page |
| 0040:0050 | Positions curseur |
| 0040:0060 | Forme curseur |
| 0040:0062 | page active |
| 0040:0063 | Port CRTC de base, 03B4h |
| 0040:0065 | Copie du registre de mode |
Une programmation directe doit maintenir la BDA si le BIOS sera réutilisé.
Mode vidéo
Voici la liste des différents modes vidéo supporté par les cartes vidéos MDA :
| Mode | Type | Couleurs | Format Alpha | Taille caractère | Taille écran | Adresse écran |
|---|---|---|---|---|---|---|
| 07h | Texte | 4 (Mono) | 80x25 | 9x14 | 720x350 | B000h |
Remarque
- En mode texte, il n'est pas possible de modifié la police de caractères fournit avec la carte vidéo.
Curseur, pages et défilement
R14:R15 est l'adresse de cellule du curseur. R10/R11 choisissent les lignes de la cellule. Des bits R10 gèrent blink/suppression selon variante MC6845.
Position :
| adresse = StartAddress + ligne*80 + colonne |
R12:R13 déplace l'origine visible sans copier la RAM. On peut faire un scrolling circulaire, mais la RAM de 2048 cellules ne dépasse l'écran que de 48 cellules. Il n'existe donc pas une deuxième page plein écran comme sur CGA.
Le BIOS défile habituellement par copie de mots dans B000h puis efface la dernière ligne. Pour limiter les artefacts, couper l'affichage ou synchroniser les accès, au prix de performances. La RAM double-accès et les wait states de la MDA évitent le «snow» CGA typique.
Port parallèle intégré
Registres
Base historique de la MDA : 03BCh.
| Port | Accès | Description |
|---|---|---|
| 3BCh | R/W | Data Register, huit sorties D0..D7; lecture du latch/ligne |
| 3BDh | R | Status Register |
| 3BEh | R/W | Control Register |
Status :
| Bits | Description |
|---|---|
| 3 | /ERROR |
| 4 | SELECT |
| 5 | PAPER END / manque de papier |
| 6 | /ACKNOWLEDGE |
| 7 | BUSY avec inversion de l'interface PC; conventionnellement 1=pret |
| 0 à 2 | Valent 1 sur la carte IBM |
La polarité nommée dans les documents varie entre broche électrique et valeur lue. Pour un pilote, vérifier l'état «prêt» par la convention BIOS/imprimante, pas en se fiant seulement au nom BUSY.
Contrôle :
| Bits | Description |
|---|---|
| 0 | /STROBE, sortie inversée |
| 1 | /AUTO FEED, sortie inversée |
| 2 | INITIALIZE, sortie |
| 3 | /SELECT INPUT, sortie inversée |
| 4 | IRQ Enable sur transition /ACK |
| 5 à 7 | Non définis; lecture souvent a 1 sur IBM |
Le port offre douze sorties latchées (8 data+4 contrôle), cinq entrées d'état et IRQ7. Il peut servir d'Entrée/Sortie générale si les niveaux TTL, courants et directions sont respectes.
DB-25 femelle
| Broches | Description |
|---|---|
| 1 | /STROBE |
| 2 à 9 | DATA 0 à 7 |
| 10 | /ACK |
| 11 | BUSY |
| 12 | PAPER END |
| 13 | SELECT |
| 14 | /AUTO FEED |
| 15 | /ERROR |
| 16 | /INITIALIZE selon interface/câblage |
| 17 | /SELECT INPUT |
| 18..25 | masses |
Le câble IBM transforme ce DB-25 en connecteur Centronics de l'imprimante.
BIOS imprimante INT 17h
| Registre/Valeur | Description |
|---|---|
| AH=00h | Imprimer AL; retourne état dans AH |
| AH=01h | Initialiser imprimante |
| AH=02h | Lire état |
| DX=0 | LPT1, DX=1 LPT2,... |
La BDA contient les adresses de base LPT à 0040:0008h et suivantes, ainsi que les dépassements de délais à 0040:0078h. Ne pas supposer que LPT1 vaut toujours 3BCh : une autre carte peut être énumérée avant ou la configuration BIOS peut différer.
Programmation de l'imprimante
Séquence d'interrogation simplifiée :
- attendre que l'imprimante soit prête et sans erreur;
- écrire l'octet a 3BCh;
- activer /STROBE en mettant a 1 le bit 0 du latch (sortie inversee);
- respecter la largeur minimale;
- relâcher /STROBE en remettant le bit 0 a zéro;
- attendre /ACK ou la disponibilité suivante.
Conserver les autres bits du Control Register. Une paire OUT trop rapide peut produire une impulsion hors spécification; le temps des instructions 8088 originales suffisait souvent, mais une machine rapide exige un délai ou BIOS.
Avec IRQ active, /ACK peut déclencher IRQ7/INT 0Fh sur le PC original. Le gestionnaire doit identifier la source, acquitter le PIC, préserver les registres et tenir compte d'autres périphériques partageant IRQ7. Ne jamais activer une IRQ sans gestionnaire installe.
Les sorties du port ne doivent pas alimenter directement une charge importante.
Employer des tampons/optocoupleurs pour une interface non imprimante.
Détection de la MDA
BIOS
INT 11h renvoie le mot d'équipement. Les bits vidéo historiques indiquent une configuration monochrome 80x25. BDA 0040:0063=03B4h et INT 10h/AH=0Fh mode 07h confirment qu'une interface monochrome est active.
Cela ne distingue pas MDA IBM, Hercules, EGA/VGA en mode monochrome, 3270 PC ou un chipset émule.
Observation du statut
Lire 3BAh de nombreuses fois avec un dépassement de délai et rechercher les transitions bit 0. Sur IBM MDA, bits 7..4 restent a 1 et 2..1 a 0. Ne pas écrire bit0=0 a 3B8h pour tester le matériel. Ne pas modifier la RAM visible sans la sauvegarder.
Une Hercules retourne typiquement un signal vertical/ID dans les bits hauts, mais il faut d'abord vérifier que ce signal varie; un bus flottant FFh ressemble a un identifiant.
Mémoire miroir
La répétition tous les 4 Kio est un indice IBM MDA. Un test destructif doit être fait affichage coupe, contenu sauvegarde, et uniquement après detection. Une carte clone peut reproduire le miroir; ce n'est pas une signature unique.
Programmation
Pour détecter une carte MDA (Monochrome Display Adapter) en Turbo Pascal, il est possible d'interroger les ports d'entrées/sorties et les interruptions utilisés par cette carte. Le principe général est d'accéder à certains registres spécifiques pour vérifier la présence et le type d'adaptateur vidéo installé dans le système.
La carte MDA utilise une adresse spécifique pour ses registres de contrôle vidéo, notamment les ports 3B4h et 3B5h pour le contrôleur 6845 (utilisé pour gérer l'affichage en mode texte). La détection consiste à vérifier si ces ports répondent correctement.
Voici une méthode simple pour détecter une carte MDA :
- Program DetectMDA;
-
- Uses
- Crt;
-
- Function IsMDA:Boolean;
- Var
- OldValue,TestValue:Byte;
- Begin
- IsMDA:=False;
- OldValue:=Port[$3B4]; { Lire la valeur actuelle du registre d'index du 6845 }
- { Tester en écrivant puis en relisant une valeur dans le registre d'index }
- Port[$3B4]:=$0F; { Écrire une valeur de test }
- TestValue:=Port[$3B4];
- { Si la carte MDA est présente, elle devrait répondre avec la même valeur qu'on lui a envoyée }
- If TestValue=$0F Then IsMDA:=True;
- { Restaurer la valeur originale }
- Port[$3B4]:=OldValue;
- End;
-
- BEGIN
- If IsMDA Then WriteLn('Carte MDA détectée.')
- Else Writeln('Carte MDA non détectée.');
- END.
Le port $3B4 est utilisé par la carte MDA pour contrôler le 6845, un circuit utilisé pour la gestion de l'affichage en mode texte. Ce registre d'index permet d'adresser différents registres internes du 6845. Ensuite, lors du test de lecture et d'écriture, le programme lit d'abord la valeur actuelle du port 3B4h, puis écrit une valeur de test ($0F). Enfin, il relit le port pour vérifier si la valeur est la même que celle envoyée. Si c'est le cas, cela indique probablement la présence d'une carte MDA.
Finalement, lors de la restauration de l'état, après avoir fait le test, la valeur initiale du port est restaurée pour ne pas perturber le fonctionnement de la carte si elle est effectivement présente.
Cette méthode ne détecte que la MDA et pas d'autres types de cartes vidéo (comme CGA, EGA, VGA,...). D'autres tests peuvent être réalisés, comme lire les zones mémoire spécifiques à la MDA (segment B000h), mais cela est souvent inutile si les ports d'entrées/sorties sont correctement testés.
La carte MDA utilise un segment mémoire spécifique pour entreposer le contenu de l'écran texte, à l'adresse B000:0000h. Vous pouvez aussi lire ou écrire dans cette mémoire pour vérifier que l'adaptateur fonctionne correctement, mais c'est généralement plus complexe.
Coexistence avec CGA/EGA/VGA
MDA utilise B0000h et 3Bxh; CGA utilise B8000h et 3Dxh. Elles pouvaient donc coexister pour un système a deux moniteurs. Le BIOS choisit l'adaptateur primaire selon les commutateurs de la carte mère et la configuration.
Un programme peut écrire directement sur l'adaptateur secondaire sans changer le BIOS, mais doit initialiser correctement les deux cartes. IBM avertit que chaque adaptateur et moniteur doit recevoir ses timings corrects après réinitialisation.
EGA/VGA peuvent sélectionner le groupe 3Bx et cartographier B000h. Une vraie MDA présente en même temps créerait un conflit si les deux décodent ces ressources.
Configurer les cartes pour éviter le chevauchement.
MODE MONO/CO80 du DOS et certains BIOS permettent de commuter l'adaptateur logique, mais le comportement dépend de la machine. Sauvegarder mode, CRTC et BDA.
Exemples assembleur 8086 (MASM/TASM)
Passer en mode MDA par BIOS
Écrire une cellule directement
Effacer l'écran
Attendre une transition horizontale avec dépassement de délai
Programmer le curseur CRTC
Envoyer un octet au port parallèle
Employer INT 17h pour la portabilité et déterminer la base via BDA.
Exemples Turbo Pascal 6/7
Mode et cellule
Afficher une chaine directement
Écrire un registre CRTC
Initialisation directe prudente
- Const MDARegs:array[0..15] of Byte =
- ($61,$50,$52,$0F,$19,$06,$19,$19,
- $02,$0D,$0B,$0C,$00,$00,$00,$00);
- Var I:Byte;
- Begin
- Port[$3B8]:=$01; { premiere ecriture : horloge haute }
- Port[$3B8]:=$21; { video coupee, high-res+blink conserves }
- for I:=0 to 15 do SetCRTC(I,MDARegs[I]);
- Port[$3B8]:=$29 { video active }
- End;
Sur matériel réel, préférer BIOS. Une interruption vidéo pendant la table peut modifier les mêmes registres; protéger la séquence courte si nécessaire.
Impression BIOS
Décoder AH selon la référence INT 17h : timeout, error, selected, paper out, acknowledge et busy ont des polarités historiques.
Absence de mode graphique IBM MDA
Il est impossible sur la MDA originale de faire :
- PutPixel(x,y,couleur)
en adressant un bitmap. La RAM contient uniquement codes de caractères et attributs. Le MC6845 génère des adresses, mais la logique MDA passe toujours par la ROM de glyphes.
On peut simuler du pseudo-graphique avec les caractères CP437 : blocs pleins, demi-blocs, hachures et cadres. La granularité reste une cellule/glyphe fixe et la police de caractères ne peut pas être chargée.
Les affirmations suivantes ne décrivent pas IBM MDA :
- 720x348 monochrome bitmap;
- deux pages graphiques B000h/B800h;
- port 3BFh Graphics Enable;
- bit 1 de 3B8h sélectionnant graphique;
- 64 Kio de RAM vidéo.
Ce sont des caractéristiques Hercules ou compatibles.