home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
ports
/
modexlib.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-28
|
4KB
|
111 lines
unit modexlib;
Interface
Var
Vscreen:Pointer; {Pointeur sur le plan source p13_2_modex}
vpage:Word; {Offset de la page qui -à ce moment - est invisible}
palette:Array[0..256*3-1] of Byte; {VGA - Palette}
Procedure Init_ModeX; {activer ModeX}
Procedure Enter400; {basculer : de Mode X à 400-lignes}
Procedure Double; {rés. virtuelle horizontale de 640 actif}
Procedure P13_2_ModeX(start,pic_size:word); {image en mode X - copie d'écran}
Procedure CopyScreen(Ziel,Quelle:Word); {copie de la page-source à la page-cible}
Procedure Copy_Block(Ziel,Quelle,Breite,Hoehe:Word);
{copie d'un bloc source-offset à cible}
Procedure ClrX(pmask:byte); {Mode X - effacer écran}
Procedure Split(Row:Byte); {Screen-Splitting dans la ligne Row}
Procedure Squeeze; {réduction de l'image du haut et du bas}
Procedure SetStart(t:Word); {positionner adresse initiale de l'image visible}
Procedure Switch; {basculer entre les pages 0 et 1}
Procedure WaitRetrace; {en attendant vertical-retrace}
Procedure SetPal; {copie d'une palette dans VGA-DAC}
Procedure GetPal; {lecture de la palette dans VGA-DAC}
Procedure Fade_Out; {fondu en fermerture }
Procedure Fade_To(Zielpal:Array of Byte; Schritt:Byte);
{passage en fondu de Palette à Zielpal}
Procedure Pal_Rot(Start,Ziel:Word);
{Rotation de la part 1 des palettes,
si Départ>Arrivé pointe vers le haut,
sinon vers le bas}
{procédures internes :}
Procedure Screen_Off; {efface l'écran}
Procedure Screen_On; {active l'écran}
Procedure CRTC_Unprotect; {permet l'accès à un Horizontal-Timing}
Procedure CRTC_Protect; {interdit l'accès de nouveau}
Procedure Init_Mode13; {active le mode 13h}
Procedure Show_Pic13; {copie de VScreen vers le mode 13h}
Procedure Make_bw(Var WorkPal:Array of Byte); {palette noir/blanc}
Implementation
Procedure Init_ModeX;external;
Procedure Enter400;external;
Procedure Double;external;
Procedure P13_2_ModeX;external;
Procedure CopyScreen;external;
Procedure Copy_Block;external;
Procedure ClrX;external;
Procedure Split;external;
Procedure Squeeze;external;
Procedure SetStart;external;
Procedure Switch;external;
Procedure WaitRetrace;external;
Procedure SetPal;external;
Procedure GetPal;external;
Procedure Fade_Out;external;
Procedure Fade_To;external;
Procedure Pal_Rot;external;
{$l c:\edition\prog\fr\asm\modexlib}
Procedure Screen_Off;
Begin
Port[$3c4]:=1; {sélectionner registre 1 de TS (TS Mode) }
Port[$3c5]:=Port[$3c5] or 32; {Positionner Bit 5 (Screen Off) }
End;
Procedure Screen_On;
Begin
Port[$3c4]:=1; {Sélectionner registre 1 de TS (TS Mode) }
Port[$3c5]:=Port[$3c5] and not 32; {Bit 5 (effacer Screen Off)}
End;
Procedure CRTC_UnProtect;
Begin
Port[$3d4]:=$11; {Register 11h des CRTC (Vertical Sync End)}
Port[$3d5]:=Port[$3d5] and not $80 {effacer Bit 7 (Protection Bit) }
End;
Procedure CRTC_Protect;
Begin
Port[$3d4]:=$11; {Registre 11h des CRTC (Vertical Sync End)}
Port[$3d5]:=Port[$3d5] or $80 {positionner Bit 7 (Protection Bit) }
End;
Procedure Init_Mode13;assembler;
asm
mov ax,13h
int 10h
End;
Procedure Show_Pic13; {copie de VScreen vers le Mode 13h}
Begin
Move(Vscreen^,Ptr($a000,0)^,64000);
End;
Procedure Make_bw; {réduit une palette en niveau de gris}
Var i,sum:Word; {pondération : 30% rouge, 59% vert, 11% bleu}
Begin
For i:=0 to 255 do Begin
Sum:=Round(WorkPal[i*3]*0.3 + WorkPal[i*3+1]*0.59 + WorkPal[i*3+2]*0.11);
FillChar(WorkPal[i*3],3,Sum); {reporte les couleurs}
End;
End;
Begin
End.