Contributor: BJORN FELTEN 
{
> I stumbled across the correct sequence
 Well, why don't we let some more people stumble in on our little secret? :)
Something like this might do the trick. The brute delay code 'asm hlt end',
that simply waits for the next interrupt (should be the timer IRQ) to occur,
may not work on some machines -- especially when running some multitaskers.
If so it can be changed to 'delay(50)' or something like that.
}
program Ring;
uses crt;
var i:word;
begin
 for i:=0 to 6 do
 begin
 sound(523); asm hlt end;
 Delay(50);
 sound(659); asm hlt end;
 Delay(50);
 end;
 nosound
end.
{ Or, for those of you that don't like the crt unit, here's the same thing in
 BASM: }
program Ring;
begin
 asm
 mov al,0B6h
 out 43h,al
 in al,61h
 or al,3
 out 61h,al
 mov cx,7
 mov dx,42h
@the_loop:
 mov al,0E9h
 out dx,al
 mov al,8
 out dx,al
 hlt
 mov al,12h
 out dx,al
 mov al,7
 out dx,al
 hlt
 loop @the_loop
 in al,61h
 and al,0FCh
 out 61h,al
 end;
end.
 

AltStyle によって変換されたページ (->オリジナル) /