Section courante

A propos

Section administrative du site

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 :

  1. Program HerculeModeGraphique;
  2.  
  3. Uses
  4.  Dos;
  5.  
  6. Const
  7.  HERC_GRAPHICS_MODE=$12;  { Mode graphique pour Hercule }
  8.  HERC_BASE_SEGMENT=$B000; { Segment de base mémoire pour la carte Hercule }
  9.  
  10. Var
  11.  Regs:Registers;
  12.  
  13. Procedure SetHerculesGraphicsMode;
  14. Var
  15.  Regs:Registers;
  16. Begin
  17.   { Utilisation de l'interruption 10h pour changer de mode }
  18.  Regs.AH:=$00;                 { Fonction 00h : Changer le mode vidéo }
  19.  Regs.AL:=HERC_GRAPHICS_MODE;  { Mode 12h pour le mode graphique Hercule }
  20.  Intr($10,Regs);               { Appel de l'interruption vidéo BIOS }
  21. End;
  22.  
  23. Procedure PutPixel(x,y:Integer);
  24. Var
  25.  Bit:Byte;
  26.  Offset:Word;
  27.  Mask:Byte;
  28. Begin
  29.   { Calcul de l'adresse mémoire pour le pixel (x, y) }
  30.  Offset := (y div 4)*90+x;  { 720 / 8 = 90 octets par ligne }
  31.  Bit := y mod 4;  { Chaque octet peut entreposer 4 lignes de pixels }
  32.  Mask := 1 shl bit;
  33.   { Tracer le pixel dans la mémoire vidéo de la carte Hercule }
  34.  Mem[HERC_BASE_SEGMENT:offset]:=Mem[HERC_BASE_SEGMENT:offset] or mask;
  35. End;
  36.  
  37. Procedure ClearScreen;
  38. Var
  39.  i:Word;
  40. Begin
  41.   { Effacer toute la mémoire graphique en la remplissant avec des zéros }
  42.  For i:=0 to 720*348 div 8 - 1 do Mem[HERC_BASE_SEGMENT:i]:=0;
  43. End;
  44.  
  45. BEGIN
  46.   { Passer en mode graphique Hercule }
  47.  SetHerculesGraphicsMode;
  48.   { Effacer l'écran graphique }
  49.  ClearScreen;
  50.   { Tracer quelques pixels pour tester }
  51.  PutPixel(100,100);
  52.  PutPixel(200,200);
  53.  PutPixel(300,300);
  54.   { Attendre une touche pour revenir au mode texte }
  55.  ReadLn;
  56.   { Revenir en mode texte }
  57.  Regs.AH:=$00;
  58.  Regs.AL:=$03;  { Mode texte 80x25 }
  59.  Intr($10,Regs);
  60. 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



Dernière mise à jour : Dimanche, le 10 septembre 2017