home *** CD-ROM | disk | FTP | other *** search
- (* ====================================================== *)
- (* SPIRAL.PAS *)
- (* Das EGA/VGA-BIOS: *)
- (* Demo #1: Animierte Farbspirale (EGA/VGA) *)
- (* (c) 1990 Matthias Uphoff & TOOLBOX *)
- (* ====================================================== *)
-
- USES Dos, Crt, Bios2;
-
- PROCEDURE SetVideoMode(ModeNr: Byte);
- (* Intialisiert den Videomodus mit der Nummer ModeNr *)
- VAR R: Registers;
- BEGIN
- R.AH := 0; (* Funktionsnummer nach AH *)
- R.AL := ModeNr; (* Modusnummer ins AL-Register *)
- Intr($10,R); (* BIOS-Call über Interrupt $10 *)
- END;
-
- PROCEDURE Box(x1,y1,x2,y2: Word; c: Byte);
- (* Zeichnet ein mit der Farbe c gefülltes Rechteck *)
- (* x1,y1 = Ecke links oben, x2,y2 = Ecke rechts unten *)
- VAR x,y: Word;
- R: Registers;
- BEGIN
- FOR y := y1 TO y2 DO
- FOR x := x1 TO x2 DO BEGIN
- R.AH := $C; (* Funktionsnummer *)
- R.AL := c; (* Farbe nach AL *)
- R.BH := 0; (* Bildschirmseite 0 *)
- R.CX := x;
- R.DX := y;
- Intr($10,R); (* BIOS-Call Punkt setzen *)
- END;
- END;
-
- PROCEDURE Spirale;
- (* Produziert eine aus Rechtecken bestehende Spirale *)
- VAR i,x,y: Word;
- c: Byte;
- r: REAL;
- BEGIN
- c := 0;
- FOR i := 0 TO 700 DO BEGIN
- c := (c + 1) MOD 16;
- IF c = 0 THEN c := 1;
- r := i/10;
- x := TRUNC(r * Cos(r) * 3) + 320;
- y := TRUNC(r * Sin(r) * 2.5) + 175;
- Box(x,y,x+8,y+6,c);
- END;
- END;
-
- PROCEDURE ColorCycling;
- (* vertauscht die Palettenfarben 1..15 zyklisch *)
- VAR Pal: PaletteType;
- tmp: Byte;
- i: Word;
- BEGIN
- (* Tabelle Pal mit Defaultwerten füllen: *)
- Pal := DefaultPal;
- (* Palettenfarben zyklisch vertauschen: *)
- REPEAT
- tmp := Pal[15];
- FOR i := 15 DOWNTO 2 DO
- Pal[i] := Pal[i-1];
- Pal[1] := tmp;
- (* 20 ms Verzögerung - eventuell anpassen: *)
- Delay(20);
- (* Alle Palettenreg. mit den Werten in Pal laden: *)
- SetAllPal(Pal);
- UNTIL KeyPressed;
- END;
-
- BEGIN (* Hauptprogramm *)
- SetVideoMode($10); (* EGA-Grafik 640 x 350 *)
- Spirale; (* Spirale zeichnen... *)
- ColorCycling; (* ...und in Drehung versetzen *)
- SetVideoMode($3) (* zurück in den Textmodus *)
- END.
-
- (* ====================================================== *)
- (* Ende SPIRAL.PAS *)