home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / ports / modexlib.pas < prev    next >
Pascal/Delphi Source File  |  1994-10-28  |  4KB  |  111 lines

  1. unit modexlib;
  2. Interface
  3. Var
  4.   Vscreen:Pointer;              {Pointeur sur le plan source p13_2_modex}
  5.   vpage:Word;                   {Offset de la page qui -à ce moment - est invisible}
  6.   palette:Array[0..256*3-1] of Byte; {VGA - Palette}
  7.  
  8.   Procedure Init_ModeX;         {activer ModeX}
  9.   Procedure Enter400;           {basculer : de Mode X à 400-lignes}
  10.   Procedure Double;             {rés. virtuelle horizontale de 640 actif}
  11.  
  12.   Procedure P13_2_ModeX(start,pic_size:word);  {image en mode X - copie d'écran}
  13.   Procedure CopyScreen(Ziel,Quelle:Word);  {copie de la page-source à la page-cible}
  14.   Procedure Copy_Block(Ziel,Quelle,Breite,Hoehe:Word);
  15.                                 {copie d'un bloc source-offset à cible}
  16.   Procedure ClrX(pmask:byte);   {Mode X - effacer écran}
  17.  
  18.   Procedure Split(Row:Byte);    {Screen-Splitting dans la ligne Row}
  19.   Procedure Squeeze;            {réduction de l'image du haut et du bas}
  20.   Procedure SetStart(t:Word);   {positionner adresse initiale de l'image visible}
  21.   Procedure Switch;             {basculer entre les pages 0 et 1}
  22.  
  23.   Procedure WaitRetrace;        {en attendant vertical-retrace}
  24.   Procedure SetPal;             {copie d'une palette dans VGA-DAC}
  25.   Procedure GetPal;             {lecture de la palette dans VGA-DAC}
  26.  
  27.   Procedure Fade_Out;           {fondu en fermerture    }
  28.   Procedure Fade_To(Zielpal:Array of Byte; Schritt:Byte);
  29.                                 {passage en fondu de Palette à Zielpal}
  30.   Procedure Pal_Rot(Start,Ziel:Word);
  31.                                 {Rotation de la part 1 des palettes,
  32.                                  si Départ>Arrivé pointe vers le haut,
  33.                                  sinon vers le bas}
  34.  
  35.  
  36. {procédures internes :}
  37.   Procedure Screen_Off;         {efface l'écran}
  38.   Procedure Screen_On;          {active l'écran}
  39.   Procedure CRTC_Unprotect;     {permet l'accès à un Horizontal-Timing}
  40.   Procedure CRTC_Protect;       {interdit l'accès de nouveau}
  41.  
  42.   Procedure Init_Mode13;        {active le mode 13h}
  43.   Procedure Show_Pic13;         {copie de VScreen vers le mode 13h}
  44.  
  45.   Procedure Make_bw(Var WorkPal:Array of Byte); {palette noir/blanc}
  46.  
  47. Implementation
  48.   Procedure Init_ModeX;external;
  49.   Procedure Enter400;external;
  50.   Procedure Double;external;
  51.  
  52.   Procedure P13_2_ModeX;external;
  53.   Procedure CopyScreen;external;
  54.   Procedure Copy_Block;external;
  55.   Procedure ClrX;external;
  56.  
  57.   Procedure Split;external;
  58.   Procedure Squeeze;external;
  59.   Procedure SetStart;external;
  60.   Procedure Switch;external;
  61.  
  62.   Procedure WaitRetrace;external;
  63.   Procedure SetPal;external;
  64.   Procedure GetPal;external;
  65.  
  66.   Procedure Fade_Out;external;
  67.   Procedure Fade_To;external;
  68.   Procedure Pal_Rot;external;
  69.   {$l c:\edition\prog\fr\asm\modexlib}
  70.  
  71. Procedure Screen_Off;
  72. Begin
  73.   Port[$3c4]:=1;                {sélectionner registre 1 de TS (TS Mode) }
  74.   Port[$3c5]:=Port[$3c5] or 32; {Positionner Bit 5 (Screen Off) }
  75. End;
  76. Procedure Screen_On;
  77. Begin
  78.   Port[$3c4]:=1;                {Sélectionner registre 1 de TS (TS Mode) }
  79.   Port[$3c5]:=Port[$3c5] and not 32;  {Bit 5 (effacer Screen Off)}
  80. End;
  81. Procedure CRTC_UnProtect;
  82. Begin
  83.   Port[$3d4]:=$11;              {Register 11h des CRTC (Vertical Sync End)}
  84.   Port[$3d5]:=Port[$3d5] and not $80  {effacer Bit 7 (Protection Bit) }
  85. End;
  86. Procedure CRTC_Protect;
  87. Begin
  88.   Port[$3d4]:=$11;              {Registre 11h des CRTC (Vertical Sync End)}
  89.   Port[$3d5]:=Port[$3d5] or $80 {positionner Bit 7 (Protection Bit) }
  90. End;
  91. Procedure Init_Mode13;assembler;
  92. asm
  93.   mov ax,13h
  94.   int 10h
  95. End;
  96. Procedure Show_Pic13;           {copie de VScreen vers le Mode 13h}
  97. Begin
  98.   Move(Vscreen^,Ptr($a000,0)^,64000);
  99. End;
  100. Procedure Make_bw;              {réduit une palette en niveau de gris}
  101. Var i,sum:Word;                 {pondération : 30% rouge, 59% vert, 11% bleu}
  102. Begin
  103.   For i:=0 to 255 do Begin
  104.     Sum:=Round(WorkPal[i*3]*0.3 + WorkPal[i*3+1]*0.59 + WorkPal[i*3+2]*0.11);
  105.     FillChar(WorkPal[i*3],3,Sum); {reporte les couleurs}
  106.   End;
  107. End;
  108.  
  109. Begin
  110. End.
  111.