66 lines
2.0 KiB
C++
66 lines
2.0 KiB
C++
#include <dos.h>
|
|
|
|
void InitSpeaker(void);
|
|
void CloseSpeaker(void);
|
|
void SpkSendByte(unsigned char b);
|
|
|
|
/*
|
|
Rutinas de PWM para el altavoz interno del PC.
|
|
*/
|
|
|
|
unsigned char TablaSpeaker[256] =
|
|
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
|
0x40,0x40,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
|
|
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,
|
|
0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,
|
|
0x3D,0x3D,0x3D,0x3D,0x3D,0x3D,0x3D,0x3D,
|
|
0x3D,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,
|
|
0x3C,0x3C,0x3C,0x3B,0x3B,0x3B,0x3B,0x3B,
|
|
0x3B,0x3B,0x3B,0x3B,0x3B,0x3A,0x3A,0x3A,
|
|
0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x3A,0x39,
|
|
0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
|
|
0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,
|
|
0x38,0x37,0x37,0x37,0x37,0x37,0x36,0x36,
|
|
0x36,0x36,0x35,0x35,0x35,0x35,0x34,0x34,
|
|
0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x30,
|
|
0x30,0x2F,0x2E,0x2D,0x2C,0x2B,0x2A,0x29,
|
|
0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,
|
|
0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x1A,0x19,
|
|
0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,
|
|
0x11,0x10,0x10,0x0F,0x0F,0x0E,0x0E,0x0D,
|
|
0x0D,0x0D,0x0C,0x0C,0x0C,0x0C,0x0B,0x0B,
|
|
0x0B,0x0B,0x0A,0x0A,0x0A,0x0A,0x0A,0x09,
|
|
0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
|
|
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
|
|
0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,
|
|
0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,
|
|
0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,
|
|
0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
|
|
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
|
|
0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,
|
|
0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,
|
|
0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,
|
|
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};
|
|
|
|
|
|
void InitSpeaker(void)
|
|
{
|
|
asm CLI;
|
|
outportb(0x43,0x90); /* Prepara el Timer 2: Acceso MSB y modo terminal */
|
|
outportb(0x61,inportb(0x61) | 3); /* Hace que el speaker funcione con el timer 2 */
|
|
asm STI;
|
|
}
|
|
|
|
void CloseSpeaker(void)
|
|
{
|
|
asm CLI;
|
|
outportb(0x61,inportb(0x61) & 0xFC); /* Para el altavoz */
|
|
outportb(0x43,0xB6); /* Restaura el valor del registro de control del Timer 2 */
|
|
asm STI;
|
|
}
|
|
|
|
void SpkSendByte(unsigned char b)
|
|
{
|
|
outportb(0x42,TablaSpeaker[b]);
|
|
}
|