Spécification | Description |
---|---|
Fabricant | Hercules Computer Technology, Inc. |
Date de conception | 1982 |
RAM installé | 16 Ko |
Puce | Motorola MC6845 |
Introduction
La carte vidéo Hercules Graphics Adapter du fabricant Hercules Computer Technology, Inc. est carte monochrome extrêmement puissante pour l'époque étant un rivale beaucoup plus intéressant que la carte vidéo MDA de l'entreprise IBM pour ses micro-ordinateurs IBM PC.
La carte HGC (Hercules Graphics Card) est devenue une sorte de norme car elle prenait entièrement en charge MDA mais ajoutait un mode graphique monochrome haute résolution de 720x348 pixels. Cela a été largement adopté au début des années 1980 et a en fait survécu à CGA en termes d'utilité au fil des ans en raison du mode texte de haute qualité grâce à sa rétrocompatibilité MDA tout en offrant également un mode graphique haute résolution (bien qu'en 2 couleurs). Il était souvent utilisé dans une configuration à deux moniteurs avec une carte MDA sortant sur un écran et la carte Hercules sortant vers un deuxième écran. Les techniques de tramage étaient souvent utilisées par les jeux et autres logiciels pour produire ce qui semblait être des nuances pour différencier davantage les 2 couleurs. Pour prendre en charge le mode graphique, une carte Hercules était livrée avec 64 Ko de RAM vidéo, soit 16 fois celle d'une carte MDA.
Les cartes Hercules utilisaient la même zone de mémoire de départ que MDA (B0000h) pour entreposer le tampon d'image (contenu de l'écran), mais avec les 64 Ko de RAM vidéo du HGC utilisant B0000h à BFFFFh, cela aurait chevauché la zone de mémoire vidéo d'une carte CGA ayant commencé à B8000h. Il était possible d'avoir à la fois une carte CGA et une carte MDA dans un PC en même temps pour fournir 2 sorties moniteur côte à côte (un texte et un graphique), donc afin de conserver une compatibilité descendante totale avec cela, Hercules les cartes ont désactivé par défaut les 32 Ko supérieurs afin de ne pas provoquer ce chevauchement.
Les simulateurs CGA vous permettaient d'exécuter le logiciel CGA avec une carte Hercules, principalement pour les jeux ne fournissant pas d'option graphique Hercules. Ceux-ci ont fonctionné de plusieurs manières. Pour les programmes écrivant directement dans la \ zone de mémoire CGA, ils utiliseraient le fait que cette partie supérieure de la zone de mémoire du HGC était inutilisée/désactivée. Une interruption contrôlée par minuterie «recartographiait» le contenu de la zone de mémoire CGA à B8000h vers la zone de mémoire inférieure du HGC à B0000h ainsi que la conversion de son contenu, par exemple les couleurs graphiques CGA en 4 bits en noir et blanc tramé 1 bit et en étirant la résolution, pour s'afficher assez correctement sur le moniteur Hercules. Une autre méthode utilisée par ces utilitaires consistait à piéger les appels BIOS vidéo (dans les cas où ils étaient utilisés plutôt que des mises à jour d'écran "directes") et à effectuer la conversion lorsqu'ils étaient détectés. Selon les performances de votre PC, cela pourrait se produire pour chaque "image" envoyée au moniteur - sinon, le jeu fonctionnerait plus lentement, bien que certains simulateurs aient la possibilité de supprimer des images afin de suivre le rythme. Le seul cas où cela ne fonctionnerait pas était lorsqu'un jeu écrivait directement dans les registres CRTC (contrôleur CRT) de la carte CGA, car une carte Hercules n'avait pas la même puce de contrôleur CRT qu'une carte CGA.
Les ports d'entrée/sortie 80x86
Voici la liste des ports d'entrées/sorties utilisés par la carte vidéo Hercules Graphics Adapter :
Port | Description |
---|---|
3B0h | Ce port à un comportement identique au port 3B4h. |
3B1h | Ce port à un comportement identique au port 3B5h. |
3B2h | Ce port à un comportement identique au port 3B4h. |
3B3h | Ce port à un comportement identique au port 3B5h. |
3B4h | Ce port permet d'indiquer le registre d'index. |
3B8h | Ce port permet d'indiquer le registre de contrôle du mode d'affichage. |
3BAh | Ce port permet d'indiquer le registre d'état. |
3BBh | Ce port permet d'indiquer de réinitialiser le crayon lumineux. |
3BFh | Ce port permet d'indiquer de fixer le mode et la page graphique. |
Programmation
La carte Hercules Graphics Card (HGC) est un adaptateur vidéo monochrome capable d'afficher des résolutions graphiques en mode haute définition de 720x348 pixels. Pour basculer en mode graphique sur une carte Hercules en Turbo Pascal, il faut utiliser des commandes spécifiques pour accéder aux registres de l'adaptateur et activer le mode graphique.
Voici un exemple de code permettant de passer en mode graphique Hercules en Turbo Pascal et de tracer des pixels :
- Program HerculeModeGraphique;
-
- Uses
- Dos;
-
- Const
- HERC_GRAPHICS_MODE=$12; { Mode graphique pour Hercule }
- HERC_BASE_SEGMENT=$B000; { Segment de base mémoire pour la carte Hercule }
-
- Var
- Regs:Registers;
-
- Procedure SetHerculesGraphicsMode;
- Var
- Regs:Registers;
- Begin
- { Utilisation de l'interruption 10h pour changer de mode }
- Regs.AH:=$00; { Fonction 00h : Changer le mode vidéo }
- Regs.AL:=HERC_GRAPHICS_MODE; { Mode 12h pour le mode graphique Hercule }
- Intr($10,Regs); { Appel de l'interruption vidéo BIOS }
- End;
-
- Procedure PutPixel(x,y:Integer);
- Var
- Bit:Byte;
- Offset:Word;
- Mask:Byte;
- Begin
- { Calcul de l'adresse mémoire pour le pixel (x, y) }
- Offset := (y div 4)*90+x; { 720 / 8 = 90 octets par ligne }
- Bit := y mod 4; { Chaque octet peut entreposer 4 lignes de pixels }
- Mask := 1 shl bit;
- { Tracer le pixel dans la mémoire vidéo de la carte Hercule }
- Mem[HERC_BASE_SEGMENT:offset]:=Mem[HERC_BASE_SEGMENT:offset] or mask;
- End;
-
- Procedure ClearScreen;
- Var
- i:Word;
- Begin
- { Effacer toute la mémoire graphique en la remplissant avec des zéros }
- For i:=0 to 720*348 div 8 - 1 do Mem[HERC_BASE_SEGMENT:i]:=0;
- End;
-
- BEGIN
- { Passer en mode graphique Hercule }
- SetHerculesGraphicsMode;
- { Effacer l'écran graphique }
- ClearScreen;
- { Tracer quelques pixels pour tester }
- PutPixel(100,100);
- PutPixel(200,200);
- PutPixel(300,300);
- { Attendre une touche pour revenir au mode texte }
- ReadLn;
- { Revenir en mode texte }
- Regs.AH:=$00;
- Regs.AL:=$03; { Mode texte 80x25 }
- Intr($10,Regs);
- END.
La procédure SetHerculesGraphicsMode utilise l'interruption 10h du BIOS pour basculer en mode graphique Hercules. Le mode 12h est celui utilisé pour la résolution 720x348 en noir et blanc sur une carte Hercules. La procédure PutPixel permet de tracer un pixel à une position donnée (x, y). Le calcul du déplacement se base sur la résolution de la carte (720 pixels par ligne) et sur le fait que chaque octet en mémoire peut contenir 4 lignes de pixels. On utilise un bitmask pour définir précisément quelle ligne de pixel (sur les 4 possibles) dans l'octet de mémoire doit être activée. La procédure ClearScreen remplit la mémoire vidéo dédiée avec des zéros pour effacer l'écran avant d'afficher quelque chose. À la fin du programme, une fois que l'utilisateur a appuyé sur une touche, on retourne au mode texte standard 80x25 (mode 03h).
Remarques
- Mémoire vidéo : La carte Hercules utilise le segment mémoire B000h pour l'entreposage de la mémoire vidéo (contrairement à d'autres cartes comme CGA utilisant le segment B800h).
- Interruption 10h : Cette interruption du BIOS permet de changer le mode vidéo de manière simple, même avec des cartes spécifiques comme la Hercules.
- Vitesse : Le mode graphique Hercule peut être lent comparé à des modes graphiques plus modernes, surtout en raison du besoin de manipuler des bits individuellement dans les octets de la mémoire vidéo.