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

  1. unit modexlib;                  {Header für modexlib.asm}
  2. Interface
  3. Var
  4.   Vscreen:Pointer;              {Zeiger auf Quellbereich für p13_2_modex}
  5.   vpage:Word;                   {Offset der aktuell unsichtbaren Seite}
  6.   palette:Array[0..256*3-1] of Byte; {VGA - Palette}
  7.  
  8.   Procedure Init_ModeX;         {ModeX einschalten}
  9.   Procedure Enter400;           {von Mode X nach 400-Zeilen schalten}
  10.   Procedure Double;             {virtuelle horiz. Auflösung von 640 ein}
  11.  
  12.   Procedure P13_2_ModeX(start,pic_size:word);  {Bild auf Mode X - Screen kop.}
  13.   Procedure CopyScreen(Ziel,Quelle:Word);  {Quell-Seite nach Ziel-Seite kop.}
  14.   Procedure Copy_Block(Ziel,Quelle,Breite,Hoehe:Word);
  15.                                 {kopiert Block von Quell-Offset nach Ziel}
  16.   Procedure ClrX(pmask:byte);   {Mode X - Bildschirm löschen}
  17.  
  18.   Procedure Split(Row:Byte);    {Screen-Splitting in Zeile Row}
  19.   Procedure Squeeze;            {Bild zusammenfahren von oben und unten}
  20.   Procedure SetStart(t:Word);   {Startadresse des sichtbaren Bilds setzen}
  21.   Procedure Switch;             {zwischen Seite 0 und 1 hin und herschalten}
  22.  
  23.   Procedure WaitRetrace;        {wartet auf Vertikal-Retrace}
  24.   Procedure SetPal;             {kopiert Palette in VGA-DAC}
  25.   Procedure GetPal;             {liest Palette aus VGA-DAC aus}
  26.  
  27.   Procedure Fade_Out;           {blendet Bild aus}
  28.   Procedure Fade_To(Zielpal:Array of Byte; Schritt:Byte);
  29.                                 {blendet von Palette nach Zielpal}
  30.   Procedure Pal_Rot(Start,Ziel:Word);
  31.                                 {Rotiert Palettenteil um 1,
  32.                                  wenn Start>Ziel nach oben, sonst unten}
  33.  
  34.  
  35. {interne Prozeduren:}
  36.   Procedure Screen_Off;         {schaltet Bildschirm aus}
  37.   Procedure Screen_On;          {schaltet Bildschirm wieder ein}
  38.   Procedure CRTC_Unprotect;     {ermöglicht Zugriff auf Horizontal-Timing}
  39.   Procedure CRTC_Protect;       {verbietet Zugriff wieder}
  40.  
  41.   Procedure Init_Mode13;        {schaltet Mode 13h ein}
  42.   Procedure Show_Pic13;         {Kopiert VScreen auf Mode 13h}
  43.  
  44.   Procedure Make_bw(Var WorkPal:Array of Byte); {Palette auf schwarz/weiß}
  45.  
  46. Implementation
  47.   Procedure Init_ModeX;external;
  48.   Procedure Enter400;external;
  49.   Procedure Double;external;
  50.  
  51.   Procedure P13_2_ModeX;external;
  52.   Procedure CopyScreen;external;
  53.   Procedure Copy_Block;external;
  54.   Procedure ClrX;external;
  55.  
  56.   Procedure Split;external;
  57.   Procedure Squeeze;external;
  58.   Procedure SetStart;external;
  59.   Procedure Switch;external;
  60.  
  61.   Procedure WaitRetrace;external;
  62.   Procedure SetPal;external;
  63.   Procedure GetPal;external;
  64.  
  65.   Procedure Fade_Out;external;
  66.   Procedure Fade_To;external;
  67.   Procedure Pal_Rot;external;
  68.   {$l c:\edition\prog\fr\asm\modexlib}
  69.  
  70. Procedure Screen_Off;
  71. Begin
  72.   Port[$3c4]:=1;                {Register 1 des TS (TS Mode) selektieren}
  73.   Port[$3c5]:=Port[$3c5] or 32; {Bit 5 (Screen Off) setzen}
  74. End;
  75. Procedure Screen_On;
  76. Begin
  77.   Port[$3c4]:=1;                {Register 1 des TS (TS Mode) selektieren}
  78.   Port[$3c5]:=Port[$3c5] and not 32;  {Bit 5 (Screen Off löschen}
  79. End;
  80. Procedure CRTC_UnProtect;
  81. Begin
  82.   Port[$3d4]:=$11;              {Register 11h des CRTC (Vertical Sync End)}
  83.   Port[$3d5]:=Port[$3d5] and not $80  {Bit 7 (Protection Bit) löschen}
  84. End;
  85. Procedure CRTC_Protect;
  86. Begin
  87.   Port[$3d4]:=$11;              {Register 11h des CRTC (Vertical Sync End)}
  88.   Port[$3d5]:=Port[$3d5] or $80 {Bit 7 (Protection Bit) setzen}
  89. End;
  90. Procedure Init_Mode13;assembler;
  91. asm
  92.   mov ax,13h
  93.   int 10h
  94. End;
  95. Procedure Show_Pic13;           {Kopiert VScreen auf Mode 13h}
  96. Begin
  97.   Move(Vscreen^,Ptr($a000,0)^,64000);
  98. End;
  99. Procedure Make_bw;              {réduit une palette en niveau de gris}
  100. Var i,sum:Word;                 {pondération : 30% rouge, 59% vert, 11% bleu}
  101. Begin
  102.   For i:=0 to 255 do Begin
  103.     Sum:=Round(WorkPal[i*3]*0.3 + WorkPal[i*3+1]*0.59 + WorkPal[i*3+2]*0.11);
  104.     FillChar(WorkPal[i*3],3,Sum); {reporte les couleurs}
  105.   End;
  106. End;
  107.  
  108. Begin
  109. End.
  110.