Mesures de vitesse sur PutPixel en mode 13h

Test de 3 façons différentes d’afficher un pixel (avec Turbo Pascal 7.0) :

(***************************************************************)

procedure PutPixel1(x,y: word; color: byte);
begin
  Mem[VGA_SEGMENT: y*320+x]:=color;
end; { PutPixel1 }

(***************************************************************)

procedure PutPixel2(x,y: word; color: byte); assembler;
asm
  mov  ax,VGA_SEGMENT  { es <-- $A000 }
  mov  es,ax
  mov  ax,VGA_WIDTH    { ax <-- 320 }
  mul  y               { ax <-- y*320 }
  add  ax,x            { ax <-- y*320+x }
  mov  bx,ax           { bx <-- y*320+x }
  mov  al,color
  mov  es:[bx],al
end; { PutPixel2 }

(***************************************************************)

procedure PutPixel3(x,y: word; color: byte); assembler;
asm
  mov  ax,VGA_SEGMENT  { es <-- $A000 }
  mov  es,ax
  mov  ax, y   { ax <-- y }
  mov  di, ax  { di <-- y }
  shl  ax, 8   { ax <-- y*256 }
  shl  di, 6   { di <-- y*64 }
  add  di, ax  { di <-- y*320 }
  add  di, x   { di <-- y*320+x }
  mov  al, color
  mov  [es:di],al
end; { PutPixel3 }

(***************************************************************)

Sous DOSBox, la procédure la plus rapide semble être la première (test réalisé plusieurs fois) :

Extrait du programme de test :

for c:=0 to 15 do
begin
  for y:=0 to 199 do
  begin
    for x:=0 to 319 do
    begin
      PutPixel1(x,y,c);
    end;
  end;
end;

En approfondissant, et pour une raison que je ne m'explique pas, on se rend compte que la position des PutPixels dans le programme a une influence : le premier est avantagé. J'ai donc changé la méthodologie et arrive à ceci :



PutPixel2 semble être la procédure plus rapide. Je suis autour de 25,4 ms par écran, soit 39,4 FPS.

Si vous pensez avoir mieux au niveau du code, je suis preneur...

Turbo Pascal : BGIDriv et BGIFont

Dans un de mes programmes écrit avec Turbo Pascal, plus de 20 ans après, je ne savais plus d’où sortaient les unités BGIDriv et BGIFont alors j’ai tout repris à zéro :

Créer un répertoire C:\TEMP (mkdir temp dans DOSBox).
Copier dans ce répertoire les fichiers BGIDRIV.PAS, BGIFONT.PAS, BGILINK.PAS, BGILINK.MAK qu’on trouve dans ~/DOSBox/TP7/EXAMPLES/BGI.
Copier dans ce même répertoire tous les fichiers .CHR et .BGI qu’on trouve dans ~/DOSBox/TP7/BGI.
Modifier BGILINK.MAK en remplaçant BGI = ..\..\bgi par BGI = \TEMP

Dans DosBox, taper :
cd temp
make -fbgilink.mak

BGIDRIV.TPU et BGIFONT.TPU sont alors créés.
Les copier dans ~/DOSBox/PERSO/TP7/BUILD/.

On peut ensuite supprimer C:\TEMP.

Seules GothicFont (GOTH.CHR), SmallFont (LITT.CHR), TriplexFont (TRIP.CHR) et SansSerifFont (SANS.CHR) sont intégrées dans l’unité BGIFONT.TPU.
Pour BoldFont (BOLD.CHR), EuroFont (EURO.CHR), ComplexFont (LCOM.CHR), SimplexFont (SIMP.CHR), ScriptFont (SCRI.CHR) et TriplexScriptFont (TSCR.CHR), il faut utiliser InstallUserFont de l’unité Graph. J’en parlerai plus tard…

Turbo Pascal et DOSBox-X

Article mis à jour le 08/08/2026

J’ai adoré en son temps programmer avec Turbo Pascal. Aujourd’hui, je souhaite m’y replonger pour diverses raisons. J’ai installé il y a quelques jours DOSBox (sous Debian). Au tour de Turbo Pascal… avant d’aller voir peut-être du côté de Free Pascal.

Dans mon répertoire ~/DOSBox-X, j’ai créé un répertoire TP7 dans lequel j’ai décompressé l’archive tp7.zip téléchargeable après inscription sur le site Developpez.com ou directement depuis leur ftp.

Dans la console, taper :
nano ~/.config/dosbox-x/dosbox-x-2025.02.01.conf

et modifier le fichier dosbox-x-2025.02.01.conf :
rajouter dans la section [autoexec], à la ligne 1349 :

mount c "~/DOSBox-X" (à adapter)
c:
@ECHO OFF

### TURBO PASCAL 7.0 ###  (à installer)
# http://ftp-developpez.com/pascal/turbo-pascal/tp7.zip
path=%path%;c:\tp7\bin

Pour accéder à Turbo Pascal, il ne reste plus qu’à taper turbo dans DOSBox.

Pour basculer entre le mode fenêtré et le mode plein écran, presser Alt-Entrée. Pour libérer le curseur de la souris, presser Ctrl-F10.

File > Change dir…

Options > Directories
EXE & TPU directory: C:\PERSO\TP7\BUILD
Unit directories: C:\TP7\UNITS;C:\PERSO\TP7\SRC\LIB

Options > Save

Quelques Liens :
Les manuels de Borland sur le Turbo Pascal (en pdf)
Turbo Pascal 7.0 : Différents types de variables
SWAG : SourceWare Archive Group => allswags.zip (29/11/1997)
https://turbo-pascal.developpez.com
https://github.com/johangardhage/dos-tpdemos

Et un livre pour débuter (ou s’y remettre) :