[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