{

Sterretjes...........


.... Made by.... . Frank Disseldorp (email:disseldorp@multiweb.net)


....Greetings Earthlings!.....



...Je videokaart moet wel Vesa1.2 ondersteunen, en het liefst geen S3 heten!
Probeer anders Univbe te installeren...
}

Program Vesa_Sterren;
uses crt;
const
 sterren=200;          { Het aantal Sterren }
 videomode=$101;
var
 ster:array[1..sterren] of record
                            xpos,ypos,col:word;
                            snel:byte;
                           end;
 a,b,c:word;
Type PVesaMode = ^TVesaMode;
     TVesaMode = Array[0..255] Of Word;


     ModeAttr  = (ModeAvail,               { De gehele es:di 256 byte  }
                  ModeExtendInfo,          { buffer... wat een rotzooi }
                  ModeBiosSupport,         { k`moet het nog ff }
                  ModeColor,               { weg zien te halen }
                  ModeGraphics,
                  ModeBit5,
                  ModeBit6,
                  ModeBit7,
                  ModeBit8);

     WinAttr   = (WinSupported,
                  WinReadable,
                  WinWriteable);

     TMemModel = (ModeText,
                  ModeCGA,
                  ModeHerc,
                  Mode4Plane,
                  ModePacked,
                  ModeModeX,
                  ModeRGB);

Var  VesaInfo  : Record
                   Vesa            : Array[1..4] Of Char;
                   Version         : Word;
                   POEM            : PChar;
                   Cap             : LongInt;
                   Modes           : PVesaMode;
                   PMList          : Array[18..255] Of Byte;
                 End;

     ModeInfo  : Record
                   Attr            : Set Of ModeAttr;
                   WinAttrA        : Set Of WinAttr;
                   WinAttrB        : Set Of WinAttr;
                   WinGranularity  : Word;
                   WinSize         : Word;
                   WinSegA         : Word;
                   WinSegB         : Word;
                   WinFunct        : Procedure;
                   ScanBytes       : Word;
                   ExtendInfo      : Record
                                       XRes         : Word;
                                       YRes         : Word;
                                       XCharSize    : Byte;
                                       YCharSize    : Byte;
                                       Planes       : Byte;
                                       BitsPerPixel : Byte;
                                       Banks        : Byte;
                                       MemModel     : TMemModel;
                                       BankSize     : Byte;
                                     End;

                   Pad             : Array[29..255] Of Byte;
                 End;

cx,cy:word;
bank,oudbank:word;
adres:longint;
granularity:byte;      { De beruchte granularity }
Procedure Vraagvesainfo;
 begin;
  asm
   mov ax,4f01h;
   mov cx,videomode;
   mov di,offset modeinfo;
   int 10h;
 end;
end;
Procedure switchbank(bank:byte);  { en houd rekening met granularity }
 begin;
  asm
   mov ax,64;
   mov bl,granularity;
   div bl;
   mov bl,bank;  { van 0 tot (in dit geval) 4}
   mul bl;
   mov dx,ax;
   mov ax,4f05h;
   mov bx,0;
   int 10h;
 end;
end;
Procedure GaSvga;
 begin;
  asm
   mov ax,4f02h;
   mov bx,videomode;
   int 10h;
  end;
 end;
Function BankNo(X,Y : LongInt) : Word;
Var Dummy   : LongInt;
Begin
     Dummy:=(X+(Y*640)) Div 65535;
     BankNo:=Dummy;
End;
Procedure ZetPunt(x,y,c:word);
 begin;
  if (x<640) and (y<480) then
   begin;
    bank:=bankno(x,y);
    if bank<>oudbank then switchbank(bank);
    oudbank:=bank;
    mem[$a000:x+(Y*640)]:=c;   { ja, sorry dit moet dus nog even }
                               { geoptimaliseerd worden....      }	
   end;
 end;
Procedure Vierkantje(x1,y1,x2,y2,cc:word);  { maakt een leeg vierkantje }
var
 v1,v2:word;
 begin;
  for v1:=x1 to x2 do
   begin;
    zetpunt(v1,y1,cc);
    zetpunt(v1,y2,cc);
   end;
  for v2:=y1 to y2 do
   begin;
    zetpunt(x1,v2,cc);
    zetpunt(x2,v2,cc);
   end;
 end;

begin;
 bank:=0;oudbank:=0;
 vraagvesainfo;
 granularity:=modeinfo.wingranularity;
 randomize;
 for a:=1 to sterren do
  begin;
   ster[a].xpos:=random(639);
   ster[a].ypos:=random(479);
   ster[a].col:=15+random(17);
   ster[a].snel:=1+random(4);
  end;
 gasvga;
 repeat;
 for a:=1 to sterren do
  with ster[a] do
   begin;
    zetpunt(xpos,ypos,0);
    dec(xpos,snel);
    if xpos

    Source: geocities.com/~franzglaser/tpsrc

               ( geocities.com/~franzglaser)