内存驻留程序-实例程序

//TSR 驻留程序设计框架

#include <stddef.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <bios.h>

 

//一些数据的定义

#define STACK_SIZE 8192 //栈的大小

#define KEYBOARD 0x60 //键盘数据端口

#define PSP_TERMINATE 0x0A //PSP中的结束地址

#define PSP_PARENT_PSP 0x16 //PSP中的父进程的PSP

#define PSP_ENV_PSP 0x2C //PSP中的环境块的地址

#define SCANCODE 52 //点键的代码

#define KEYMASK 8 //ALT键的代码

#define PARAGRAPHS(x) ((FP_OFF(x)+15)>>4)

//变量的定义

char far* indos_ptr = 0; //指向DOS安全标志的指针

char far* crit_err_ptr = 0; //指向致命错误标志的指针

char far* stack_ptr; //TSR栈的指针

char far* dta1; //前台进程的磁盘传输区地址

char far* dta2; //

 

unsigned ss_save; //用于保存堆栈段寄存器

unsigned sp_save; //用于保存堆栈指针寄存器 

static int active = 0; //TSR激活标志

static int popup_dosbusy = 0;//该标志为1,表明DOS繁忙时热键被按

static int int28_active = 0; //该标志为1,表明INT28处于活动状态

static int int13_active = 0;//该标志为1,表明INT13处于活动状态

static unsigned foreground_psp;//前台进程的PSP

static unsigned long terminateaddr; //删除TSR时使用

static int key;// 读键盘端口时使用

extern int sign;//删除TSR程序时,汇编子程序使用的返回标志

static union REGS r;

static struct SREGS s;

static struct DPSERRPR doserr;

 

typedef struct{

 unsigned bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags;

}INTERRUPT_REGS;

 

 //保存原中断的函数指针

void interrupt(*old_int8)();//时钟中断 

void interrupt(*old_int9)();//键盘中断

void interrupt(*old_int1b)();//CTRL_BREAK中断

void interrupt(*old_int23)();//CTRL_C中断

void interrupt(*old_int24)();//严重错误中断

void interrupt(*old_int28)();//DOS 空闲中断

void interrupt(*old_int62)();//通讯中断

void interrupt(*old_int13)();//磁盘读写中断

 

//函数原型声明

void interrupt far new_int8(void);

void interrupt far new_int9(void);

void interrupt far new_int1b(void);

void interrupt far new_int23(void);

void interrupt far new_int24(INTERRUPT_REGS p);

void interrupt far new_int28(void);

void interrupt far communicate(INTERRUPT_REGS p);

void interrupt far new_int13(INTERRUPT_REGS p);

void help_message(void);<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值