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

    {
    >I want to build on Infared Controller (thru RC5 coding) to controll my
    >tv, stereo, ect thru my PC. I know how to programm the computer to do so,
    >but I need to access my PC-Speaker directly !!!
    >Does anyone know the Port Adress or Mem Adress for accessing the PC-Speaker

    Here's some BASM code of mine; check the comments:
    From: ljduchez@en.com (Lou DuChez)
    }

    asm
      mov al, 182       { prepare timer to start generating sound }
      out 43h, al
      mov ax, toneout   { TONEOUT = word: 1193180 / frequency }
      out 42h, al       { send low byte to port 42h }
      mov al, ah
      out 42h, al       { send high byte to port 42h }
      in al, 61h        { get current value of port 61h }
      or al, 3          { set lowest two bits of 61h "on" -- activate speaker }
      out 61h, al       { rewrite to port 61h }
    end;

    { This code turns off the speaker: }

    asm
      in al, 61h        { set lowest two bits of 61h "off" -- deactive speaker }
      and al, 252       { this line turns the lowest two bits "off" }
      out 61h, al
    end;

    {
    > If I know this adress, all you have to do is buy a IR-Led ($1,00) and your
    > computer is the biggest enhanced remote controller.
    }

    {
    From: -deneb- <NWIEFFER@norton.ctech.ac.za>

    > I want to build on Infared Controller (thru RC5 coding) to controll my
    > tv, stereo, ect thru my PC. I know how to programm the computer to do so,
    > but I need to access my PC-Speaker directly !!!
    > Does anyone know the Port Adress or Mem Adress for accessing the PC-Speaker

    Well .... it's not half as easy as it could be ...

    There are a few way to fiddle with the speaker ...

     1.  Via the 8254 Programmable Interval Timer (PIT). (Port $40-$47)
     2.  Via the 8255 Programmable Peripheral Interface. (Port $60-$67)

     ( on the original PC, XT and earlier 286's these were seperate IC's,
       but now all of that stuff is combined into 1 along with the DMA
       controler, etc.)

    With option 1 you can tell the timer to drive the speaker at a
    certain frequency ... and that's about it,
    or with option 2 you can waggle the speaker bit up and down as you
    like ...

    For your application, I think option 2 would be the 1 to choose.
    So here goes ...
    }

    { This should push the output high }
    x:=Port[$61];
    x:=(x and $FC) or 2;
    Port[$61]:=x;

    { And this should push it low }
    x:=Port[$61];
    x:=x and $FC
    Port[$61]:=x;

    {
    And hear's what is actually does ...

    Port $61 is the 8255 port B.
    If bit 0 of port B is 0, then the speaker does exactly what bit 1
    does ... that's what I'm doing above.

    In this mode the port can go like this ...

    Port B bit 1 : 1    0    1    0
    Speaker port : High Low  High Low

    If bit 0 of port B is 1, then the speaker is conected to the PIT,
    in which case Bit 1 acts as the switch ... it either connects it to
    the PIT, or it switches it off.

    And in this mode the port goes somthing like this ...

    Port B bit 1 : 1    0    1    0
    Speaker Port : Beep Off  Beep Off
    }

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