📄 singing.c
字号:
#include <stdio.h>
#include <stddef.h>
#include <dos.h>
#include <stdlib.h>
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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -