#include<time.h> #include<dos.h> #define N1 64 #define N2 32 #define N4 16 #define N8 8 #define N16 4 #define END 0 enum NOTES { C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247, C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494, C1=525,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988, C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1796 }song[]={ D0,N4,E0,N8,D0,N8,C0,N4,A10,N4,G10,N8,E10,N8,G10,N8,A10, N8,C0,N2,A10,N4,A10,N8,C0,N8,G10,N8,A0,N8,E0,N8,G0,N8, D0,N2,E0,N4,D0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,N8,G10, N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,A10,N8,A10,N8,D10, N8,E10,N8,G10,N2,D0,N4,D0,N4,G0,N4,A0,N8,G0,N8,F0,N2,G0, N2,A0,N4,G0,N8,E0,N8,D0,N8,E0,N8,C0,N8,A10,N8,D0,N2,E0, N4,G0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,N8,G10,N8,A10,N8, C0,N4,A10,N4,A10,N8,C0,N8,D0,N8,A10,N8,C0,N8,E0,N8,D0, N1,END,END}; main() { int note=0,fre,dur,control; clock_t goal; while(song[note]!=0) { fre=song[note]; dur=song[note+1]; if(kbhit()) break; if(fre) { outportb(0x43,0xb6); fre=(unsigned)(1193180L/fre); outportb(0x42,(char)fre); outportb(0x42,(char)(fre>>8)); control=inportb(0x61); outportb(0x61,(control)|0x3); } goal=(clock_t)dur+clock( ); while(goal>clock ( )); if(fre) outportb(0x61,control); goal=(clock_t)0;note=note+2; } } |