Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
03.06.2014
Размер:
1.56 Кб
Скачать
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dos.h>
#include <stdlib.h>

void interrupt (*oldhandler)(...);
void MakeSound(char);
unsigned int count;

union REGS regs;

void interrupt handler(...) // for function wait
{
	count++;
	oldhandler();
}

void interrupt keyb_handler(...)
{
	int code;

	code = inportb(0x60);
	if(code & 0x80)
		outportb(0x61,inportb(0x61)&0xfc);
	else
		MakeSound(code);
	oldhandler();
}

void wait(float sec)
{
	int number;
	oldhandler = getvect(0x1c);
	count = 0;
	setvect(0x1c, handler);
	number= 18 * sec;
	while(count < number);
	setvect(0x1c, oldhandler);
}

void Piano()
{
	oldhandler = getvect(0x9);
	setvect(0x9, keyb_handler);
	while(inportb(0x60)!=1);
	setvect(0x9, oldhandler);
}

void MakeSound(char freq)
{
	freq = freq*10;
	unsigned i;
	union
	{
		int data;
		unsigned char bite[2];
	} count;

	unsigned char p;

	if(freq<18)
		freq = 18;
	count.data = 1193181 / freq;
	outportb(0x43,182); // 10 11 011 0
	outportb(0x42,count.bite[0]);
	outportb(0x42,count.bite[1]);
	p = inportb(0x61);
	outportb(0x61,p|3);
}



void movetoxy(int x, int y)
{
	regs.h.ah = 2;
	regs.h.dh = y;
	regs.h.dl = x;
	regs.h.bh = 0;
	int86(0x10, &regs, &regs);
}

void main(void)
{
	char message[]="HEllO! It is demonstration by DF)\0";
	int x = 5;
	int y = 2;
	int i = 0;
	sound(2000);
	clrscr();
	movetoxy(x,y);
	while(message[i]!='\0')
	{
		textcolor(message[i]);
		cprintf("%c", message[i++]);
		wait(0.1);
	}
	Piano();
}
Соседние файлы в папке несколько программ