阅读:1123回复:5
dos内存驻留问题
这个程序能够驻留,但为什么不能PrintScreen键激活呢?
请哪位大虾帮忙看看,我在tc30下编译 #include <stddef.h> #include <dos.h> #include <stdio.h> void interrupt (*oldint)(); void interrupt music(); unsigned char stack[0x1000]; unsigned intsp,intss; unsigned freq1[87],freq[87]={ 196,262,262,262,330,394,262,294,330,294,262, 0,0,0,0,0,0.0}; int dely[87]={ 25,38,12,25,25,38,12,25,12,12,56,25,25,50,25, 0,0,0,0,0,0,0}; main() { oldint=getvect(5); setvect(5,music); keep(0,(_SS+(_SP/16)-_psp)); } void interrupt music(bp,di,si,ds,es,dx,cx,bc,ax,ip,cs,flags) { int i; char orignalbits,bits; disable(); intsp=_SP; intss=_SS; _SP=(unsigned)&stack[0x1000-2]; _SS=_DS; enable(); clrscr(); printf(\"Singing a Song\"); for(i=0;i<87;i++) { outportb(0x43,0xb6); freq1=0x1234dc/freq; outportb(0x42,freq1&0x00ff); freq1=freq1>>8; outportb(0x42,freq1); bits=orignalbits=inportb(0x61); outportb(0x61,bits|3); delay(dely*25); outportb(0x61,orignalbits); } oldint(); disable(); _SP=intsp; _SS=intss; enable(); } |
|
|
沙发#
发布于:2002-08-13 12:33
1、拦截键盘的中断。
2、不能在ISR用printf! |
|
板凳#
发布于:2002-08-13 12:40
他只是用了中断5,不驻留的话,可以运行,就是驻留以后推出就无法再激活驻留程序了.
|
|
|
地板#
发布于:2002-08-13 12:41
他只是用了中断5,没有中断9啊,不驻留的话,可以运行,就是驻留以后推出就无法再激活驻留程序了.
|
|
|
地下室#
发布于:2002-08-13 13:47
你不是想用PrintScreen激活吗?不拦截,你怎么知道PrintScreen按了?
|
|
5楼#
发布于:2002-08-13 13:57
按下PrintScreen会产生中断5,请再指点一下.
|
|
|