自从用上LINUX后就用够了WINDOWS,但是好多研发还脱离不开DOS,真是没办法!
早就听说FREEDOS和MSDOS完全兼容,而且遵循的是GPL协议,所以下定决心脱离WINDOWS
,装了个FREEDOS!研发工具当然不能再用TURBO C啊等等原先商业化的东西了,用就用
个纯GNU的平台!好,就把TURBO C换成DJGPP吧,更有MASM和TASM,全部给我扔掉 ,换
成NASM!编辑器呢?用着EDIT根本就不爽,换成了DOS版的VIM,也是GNU工具!不好意思
,中文平台还是得用UCDOS,因为似乎还没有GPL协议的中文化DOS平台呢,还好UCDOS是免
费的了,不会让我的系统中存在D版软件了,我也没有做贼的感觉了!^-^
OK,这一切都搞定了,可是面对DJGPP和NASM突然发觉自己什么都不会了,以前用
TURBO C和MASM写代码的时候调用中断啊,交互编程啊,现在都不知道怎么做了,靠,和
当初刚刚接触LINUX怎么相同啊!只好到http://delorie.com/djgpp去看了,全他妈的E
文的,硬着头皮看吧!总算找到了一些用户指南,读懂了,基本上能够解决以上问题了!
想一想,那么多和自己相同的家伙们肯定也是相同的头疼,所以写出来和大家一起分享,
并非是翻译的,因为我没有耐心去翻译那些洋话连篇的东西,还是根据我的理解来写一份
教程吧,但是大牛们就不必看了!
另外,本教程假设您对turbo c或DOS下的其他C/C 有一定了解并且作过一些中断
调用,中断驻留,显存映射操作连同C/C 和ASM混合编程!
文章整理:西部数码--专业提供域名注册、虚拟主机服务
OK,废话少说,本教程分为如下四个部分:
1 如何调用中断;
2 如何往VIDEO RAM中写入数据;
3 如何写中断驻留程式;
4 如何调用NASM写的汇编函数;
5 相关协议连同免责声明及其他
_____________________________________________________________________________________
1 如何调用中断:
在DJGPP中调用实模式中断和在TURBO C中使用INT86调用中断在形式上是很类似的,看
下面的例子(来自http://delorie.com/djgpp):
#include
#include
#include
#define LOCK_VARIABLE(x) _go32_dpmi_lock_data((void *)&x,(long)sizeof(x));
#define LOCK_FUNCTION(x) _go32_dpmi_lock_code(x,(long)sizeof(x));
#define TIMER 8/*时钟中断8每18.2 ms产生一次*/
int counter = 0;/*计数器初始值*/
void TickHandler(void){/*新的时钟中断处理程式*/
counter ;
}
int main(void)
{
/*含有中断地址(selector:offset)信息的结构体*/
_go32_dpmi_seginfo OldISR, NewISR;
printf("将要把新的中断处理程式连结到旧的中断处理程式上..n");
getkey();
/*锁住函数和变量*/
LOCK_FUNCTION(TickHandler);
LOCK_VARIABLE(counter);
/*把旧的中断地址写入OldISR结构变量中*/
_go32_dpmi_get_protected_mode_interrupt_vector(TIMER, &OldISR);
/*把NewISR指向函数TickHandler的地址*/
NewISR.pm_offset = (int)TickHandler;
NewISR.pm_selector = _go32_my_cs();
/*把NewISR指向的地址连接到中断8的地址上*/
_go32_dpmi_chain_protected_mode_interrupt_vector(TIMER,&NewISR);
while (!kbhit())
printf("%dn",counter);
printf("正在恢复原有的时钟中断。。。。。。n");
/*恢复原有的时钟中断*/
_go32_dpmi_set_protected_mode_interrupt_vector(TIMER, &OldISR);
return 0;
}
_____________________________________________________________________________________
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




