[fpc-devel] finalization
Alexander
aralni at mail.ru
Tue Jan 22 10:11:50 CET 2019
Hi,
I try use finalization in unit, but it not work.
When press Ctrl+C and exit program uses this unit
PC-Speaker stay infinity play on interrupted tone.
When Ctrl+C use spkoff; in finalization section not called.
Unit:
unit spkunit;
{$MODE OBJFPC}
{$ASMMODE INTEL}
{$CODEPAGE UTF8}
{
Unit for playing melodys on PC-Speaker.
For GNU/Linux 64 bit version. Root priveleges needed.
Written on FreePascal.
Copyright (C) 2019 Artyomov Alexander
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
}
interface
uses X86;
procedure spk(b : word ); procedure spkon; procedure spkoff;
implementation
procedure spkon;
begin
asm
push rax
in al, 61h
or al, 03h
out 61h, al
pop rax
end;
end;
procedure spkoff;
begin
asm
push rax
in al, 61h
or al, 03h
xor al, 03h
out 61h, al
pop rax
end;
end;
procedure spk(b : word );
var hb, lb : byte;
begin; hb := hi (b); lb := lo (b);
asm
push rax
mov al, 0B6h
out 43h, al
mov al, lb
out 42h, al
mov al, hb
out 42h, al
pop rax
end;
end;
initialization
fpioperm($42, 2, 1); // fpioperm($42, 1, 1); fpioperm($43, 1, 1);
fpioperm($61, 1, 1);
finalization
spkoff;
end.
More information about the fpc-devel
mailing list