Simulation tv

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 911 fois - Téléchargée 36 fois

Contenu du snippet

le code fait une simulation d'une télé avec des grains

Source / Exemple :


Program TelevisionSimulator;
Type
  Video = ^VideoPTR;
  VideoPtr = Array[0..64000] of Char;   (* Pointer Array, breaks the 64kb
                                           limit so this is conceivable *)

Var
  VideoArray : Video;                   (* Variable = Pointer Array *)
  T,RanColor : byte;

Procedure SetMode(M : word); assembler; (* Set Video Mode *)
Asm
  Mov ax,M
  Int 10h
End;

Procedure PalSet(Color, Rc, Bc, Gc : Byte; TMode : Boolean);
Begin
  If (Tmode) and (Color>7) then Inc(Color,48);
  Port[$3C8] := Color;
  Port[$3C9] := Rc;
  Port[$3C9] := BC;
  Port[$3C9] := GC;
End;

Function KeyHit : Boolean;
Begin
  If Port[$60]<$80 then KeyHit:=True
  else
  KeyHit:=False;
End;

Procedure PutRandomDots(Var Scr : Array of Char);
Var
  I : Longint;

Begin
  For I:=0 to SizeOf(Scr) do Scr[I]:=Chr(Random(15)+17); (* Fill Array with
                                                            color Numbers *)
  Move(Scr,Mem[$A000:$0000],SizeOf(Scr));                (* Move array to
                                                            video memory  *)
End;

{**** Main Program *********************************************************}

Begin
  SetMode($13);                                     (* Put in 320x200 mode *)
  GetMem(VideoArray,SizeOf(VideoArray^));           (* Allocate another 64k*)
  PutRandomDots(VideoArray^);                       (* Fill array with dots*)
  FreeMem(VideoArray,SizeOf(VideoArray^));          (* Free used 64k       *)
  Repeat
    If (T>=15) and (T<=32) then Inc(T) else T:=15;  (* Pick color to change*)
    RanColor:=Random(31);                           (* Set intensity of Clr*)
    PalSet(T,RanColor,RanColor,RanColor,False);     (* Change the Palette  *)
  Until KeyHit;                                     (* Repeat until Keyhit *)
  SetMode($3);                                      (* Put in 80x25 T Mode *)
End.

{**** End of Program *******************************************************}

A voir également

Ajouter un commentaire Commentaires
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012

bon inutile de convertir ce code en delphi, je viens de m'appercevoir qu'il utilise des interruptions qui ne sont pas geré par windows, exemple l'interruption 10h, il faut être en mode msdos ou dos native, sinon ca marche pas.
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012

il n'ya pas de fonction port dans delphi il faut taper quelques lignes de codes assembleur, je te conseil d'aller voir mon source sur le port LPT et de recuperé la fonction Inp et renomme la en PortIn ainsi que la fonction Out et renomme la par PortOut our Port tout simplement, bien sur il faut enlevé les [ et les remplacer par ( exemple

procedure PalSet(Color, Rc, Bc, Gc : Byte; TMode : Boolean);
begin
if (Tmode) and (Color>7) then Inc(Color,48);
PortOut($3C8,Color);
PortOut($3C9,Rc);
PortOut($3C9,BC);
PortOut($3C9,GC);
end;
Attention ces codes Asm ne fonctionnent que sous Win95/98 sur XP l'accès hardware est proteger, j'ais pas encore effectué de mise a jours pour XP(sorry), mais ya l'adresse du composant a vous de voir, seul prob pour exporter cette source 'Simulateur TV', c la fonction Mem[$A000:$0000], ya un moment que j'ais laisser tomber le turbo pascal... mais la fonction Mem gère les blocs mémoires, je suppose qu'il faudrait taper quelques ligne asm pour simulé cette fonction.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.