singing.c

来自「TSR唱友谊天长地久的小程序」· C语言 代码 · 共 64 行

C
64
字号
#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 + =
减小字号Ctrl + -
显示快捷键?