Unit DemoVga; Interface Const Name = 'DEMOVGA : Базовый модуль для построения демок в 320x200x256!!!'; Font8 = 3; Font14 = 2; Font16 = 6; Var DBuffer,Origin : Pointer; MemStor : Pointer; Procedure InitDemoPart; Procedure RestoreDemo; Procedure SetRGBColor( C, R, G, B : Byte); Procedure ClearDBuffer; Procedure DBuff2Video; Function GetFontPtr( Size : Byte) : Pointer; Implementation Uses Crt; Procedure InitDemoPart; Begin Mark( MemStor); GetMem( DBuffer, 65500); Origin := DBuffer; Inc( LongInt( DBuffer), $10000); LongInt( DBuffer) := LongInt( DBuffer) And $FFFF0000; SegA000 := Seg( DBuffer^); ClearDBuffer; Asm Mov AX,13h Int 10h End; End; Procedure RestoreDemo; Begin FreeMem( Origin, 65500); Release( MemStor); Asm Mov AX,3h Int 10h End; End; Procedure SetRGBColor( C, R, G, B : Byte); Begin Port[ $3C8] := C; Port[ $3C9] := R; Port[ $3C9] := G; Port[ $3C9] := B; End; Procedure ClearDBuffer;Assembler; Asm Les DI,DBuffer Db $66; Xor AX,AX Mov CX,16200 Db $66; Rep Stosw End; Procedure DBuff2Video;Assembler; Asm Push DS Mov DS,SEGA000 Xor SI,SI Mov AX,0A000h Mov ES,AX Xor DI,DI Mov CX,16001 Db $66; Rep Movsw Pop DS End; Function GetFontPtr( Size : Byte) : Pointer; Var Font : Pointer; Begin Asm Push BP Mov AX,1130h Mov BH,Size Int 10h Mov AX,BP Pop BP Mov Word Ptr [Font],AX Mov Word Ptr [Font+2],ES End; GetFontPtr := Font; End; Procedure RunDemoVga; Far; Var I : Integer; Begin InitDemoPart; Repeat For I := 0 To 199 Do FillChar( Ptr( $A000, I * 320)^, 320 , I); Until KeyPressed; ReadKey; RestoreDemo; End; Begin End.