www.pudn.com > singing.rar > singing.c
#include#include #include #include void interrupt(*oldint)(); void interrupt music(); unsigned char stack[0x1000]; unsigned intsp,intss; unsigned freql[87]; unsigned freq[87]={196,262,262,262,330,294,262,294,330,294,262, 330,394,440,440.394,330,330,262,294,262,294, 330,294,262,230,230,196,262,440,394,330,330, 262,294,262,294,440,394,330,330,394,440,523, 394,330,330,262,294,262,294,330,294,262,230, 230,196,262,440,394,330,330,262,294,262,294, 440,394,330,330,394,440,523,394,330,330,262, 294,262,294,330,294,262,230,230,196,262}; int dely[87]={25,38,12,25,25,38,12,25,12,12,56,25,25,50,25, 38,12,12,12,38,12,25,12,12,38,12,25,25,100,25, 38,12,12,12,38,12,25,25,38,12,25,25,100,25,38, 12,12,12,38,12,25,12,12,38,12,25,25,100,25,38, 12,12,12,38,12,25,25,38,12,25,25,100,25,38,12, 12,12,38,12,25,12,12,38,12,25,25,100}; void main() { oldint=getvect(0x1b); setvect(0x1b,music); keep(0,(_SS+(_SP/16)-_psp)); } void interrupt music(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags) { int i; char orignalbits,bits; disable(); intsp=_SP; intss=_SS; _SP=(unsigned)&stack[0x1000-2]; _SS=_DS; enable(); clrscr(); printf("Sing a song!"); for(i=0;i<87;i++) { outportb(0x43,0xb6); freql[ i]=0x1234dc/freq[ i]; outportb(0x42,freql[ i]&0x00ff); freql[ i]=freql[ i]>>8; outportb(0x42,freql[ i]); bits=orignalbits=inportb(0x61); outportb(0x61,bits|3); delay(dely[ i]*25); outportb(0x61,orignalbits); } oldint(); disable(); _SP=intsp; _SS=intss; enable(); }