[Back to SOUND SWAG index]  [Back to Main SWAG index]  [Original]

{
SEAN PALMER

>I have TP 6.0, and I'am looking For a way to address my PC Speaker.  I don't
>know what Port it is (like PORT[$30] or something), or how to send raw Sound
>data to it. Could someone help me?

Try this, or actually a Variation on it. Doing VOC's and WAV's on a pc
speaker is not an easy task...

What you're looking For is embedded in the 'click' Procedure below...

'click' only works While no tone is being produced. click at different
rates to get different pitches/effects.

so I guess the simple answer to your question is that it's controlled by
bit 1 (from 0 to 7) of port $61.
}

Unit uTone;
Interface

Procedure tone(freq : Word);
Procedure noTone;
Procedure click;

Implementation

Const
  sCntrl   = $61; { Sound control port }
  SoundOn  = $03; { bit mask to enable speaker }
  SoundOff = $FC; { bit mask to disable speaker }
  C8253    = $43; { port address to control 8253 }
  seTimer  = $B6; { tell 8253 to expect freq data next }
  F8253    = $42; { frequency address on 8253 }

Procedure tone(freq : Word); Assembler;
Asm
  mov al, $B6
  out $43, al  {Write timer mode register}
  mov dx, $14
  mov ax, $4F38
  div freq     {1331000/Frequency pulse}
  out $42, al
  mov al, ah
  out $42, al  {Write timer a Byte at a time}
  in  al, $61
  or  al, 3
  out $61, al  {port B-switch speaker on}
end;

Procedure noTone; Assembler;
Asm
  in  al, $61
  and al, $FC
  out $61, al
end;

Procedure click; Assembler;
Asm
  in  al, $61
  xor al, 2
  out $61, al
end;

end.

[Back to SOUND SWAG index]  [Back to Main SWAG index]  [Original]