Показать сообщение отдельно
  #5  
Старый 18.06.2008, 17:45
CW-operator CW-operator вне форума
Прохожий
 
Регистрация: 18.06.2008
Сообщения: 4
Репутация: 10
По умолчанию

А у меня почему то ничего не получается... (И я знаю почему... ((

Может содскажете где моя тупая башка лажует?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
   procedure SetPort(address, Value:Word);
   procedure Sound(Freq : Word);
   procedure NoSound;
   procedure Beep(Tone, Duration: Word);
   procedure Button1Click (Sender: TObject);
   function GetPort(address:word):Word;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{-------------------------------------------------------------}

 procedure TForm1.SetPort(address, Value:Word);
var
  bValue: byte;
begin
  bValue := trunc(Value and 255);
  asm
    mov dx, address
    mov al, bValue
    out dx, al
  end;
end;

function TForm1.GetPort(address:word):word;
var
  bValue: byte;
begin
  asm
    mov dx, address
    in al, dx
    mov bValue, al
  end;
  GetPort := bValue;
end;

procedure TForm1.Sound(Freq : Word);
var
  B : Byte;
begin
  if Freq > 18 then
  begin
    Freq := Word(1193181 div LongInt(Freq));
    B := Byte(GetPort($61));
    if (B and 3) = 0 then
    begin
      SetPort($61, Word(B or 3));
      SetPort($43, $B6);
    end;
    SetPort($42, Freq);
    SetPort($42, Freq shr 8);
  end;
end;

procedure TForm1.NoSound;
var
  Value: Word;
begin
  Value := GetPort($61) and $FC;
  SetPort($61, Value);
end;

procedure TForm1.Beep(Tone, Duration: Word);
begin
  if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then
    Windows.Beep(Tone, Duration)
  else
  begin
    Sound(Tone);
    Windows.Sleep(Duration);
    NoSound;
  end;
end;

{--------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
begin
Beep(1000,100);
end;
{--------------------------------------  }

end.
Admin: Пользуемся тегами!
Ответить с цитированием