亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tsrsv.txt

?? TSR程序中"保存","恢復"技術的應用
?? TXT
字號:

                      TSR程序中"保存","恢復"技術的應用

    TSR編程常常要遇到DOS重入,屏幕保護等許多煩人的事情.但只要采用適當的
  方法,這些事情可以變得很輕松.
    我的經驗就是:保存!--盡情破壞--恢復!!
    只要把一切可能被TSR破壞的東西(數據,硬件狀態等)保存好,TSR內部就不必
  再顧慮重重了.到TSR退出激活態時,把所有東西一一復原,被中斷的程序就可以
  安全地運行下去.
    保存CPU的寄存器就不必說了,因為用interrupt關鍵字說明的函數會自動保存
  所有寄存器.下面主要給出保存屏幕,鼠標,DOS數據等的例子.

    以下的一些程序片斷,僅供分析借鑒,如有不妥或需要補充的,敬請提出. :)


>>-=============================程序實例:BEGIN=============================-<<

/*  程序在Borland C++ 3.1下編譯通過,由于涉及行內匯編,其他編譯器產
    生的結果可能有所不同,還望注意檢查.                             */

/*  由于程序涉及較多未公開的DOS調用和內部數據結構,以及較多VGA寄存
    器操作,對運行環境可能有一定的要求.                             */


#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <string.h>

/**************************下面是本程序的一些數據定義************************/

const unsigned PSP_ENV=0x2c;  //PSP中保存環境段段址的偏移
const unsigned PSP_DTA=0x80;  //PSP中用于磁盤傳輸區DTA的內存區首址
const unsigned long VGA_VRAMG=0xa0000000L;  //圖形模式顯存地址首址
const unsigned long VGA_VRAMT=0xb8000000L;  //文本模式顯存地址首址

static char vga_buf1[2048];    //保存VGA狀態數據
static char vga_buf2[0x3000];  //保存顯存數據2K+2K+8K
stactic chat mouse_buf[1024];  //保存鼠標驅動程序狀態數據
static char sda_buf[2048];     //保存DOS的SDA數據
  //以上預先分配了一些緩沖區,其大小是經驗值

static void far* sda_addr;     //DOS的SDA數據區首址
static unsigned sda_size;      //DOS的SDA數據區大小
static void far* indos_addr;   //DOS的INDOS標志地址
  //以上是DOS的一些參數,必須由main()在駐留前取得

/**************************上面是本程序的一些數據定義************************/



/************************下面是幾個有關VGA操作的輔助函數*********************/

inline void vga_set_mode(unsigned modenum)  //把VGA顯示模式設置為modenum
{
_AX=modenum;
_AH=0x0;
geninterrupt(0x10);          //AH=0,AL=modenum,調用BIOS INT 10H
}
inline void vga_rplane_sel(char planenum)  //選中VGA頁面planenum讀取
{
_AH=planenum;           //AH=planenum將被送到I/O地址0x3cf
_AL=0x4;                //AL=4送0x3ce,選中"讀頁面選擇寄存器"
outport(0x3ce,_AX);     //AL先送0x3ce,AH后送0x3cf
}
inline void vga_wplane_sel(char planenum)  //選中VGA頁面planenum寫入
{
_AX=0x0102;             //AL=2送0x3c4,選中"彩色頁面寫允許寄存器"
_AH<<=planenum;         //AH=(0x01<<planenum)將被送到I/O地址0x3c5
outport(0x3c4,_AX);     //AL先送0x3c4,AH后送0x3c5
}

/***********************上面是幾個有關VGA操作的輔助函數**********************/




/************************下面是幾個保存和恢復屏幕的函數**********************/

/* 由于使用了VESA調用,對Super VGA的模式也可以成功地保存和恢復.
   但相應地,顯示卡也必須支持有關VESA調用                       */

void vga_save(char far* buffer1,char far* buffer2)
  //保存VGA狀態到buffer1,保存被文本模式03H破壞的顯存到buffer2,并切換到模式03H
{
_ES=FP_SEG(buffer1);
_BX=FP_OFF(buffer1);    //ES:BX=buffer1,緩沖區的首址
_AX=0x4f04;             //BIOS INT 10H的4F04號VESA功能調用
_CX=0xffff;             //表示要保存所有的狀態數據
_DL=0x1;                //子功能1,保存VGA狀態到ES:BX
geninterrupt(0x10);

vga_set_mode(0x92);     //切換到模式12H,0x92的最高位是1表示保留顯存數據
vga_rplane_sel(0x2);    //選擇頁面2讀取
_fmemcpy(buffer2,(void far*)VGA_VRAMG,0x2000);
  //頁面2的開頭8K將被模式03H的字模覆蓋,故保存到buffer2

vga_set_mode(0x83);     //切換到模式03H,0x82的最高位是1表示保留顯存數據
_fmemcpy(buffer2+0x2000,(void far*)VGA_VRAMT,0x1000);
  //顯存頭上的4K(頁面0的2K是字符,頁面1的2K是屬性,CPU地址交替)
  //將被模式03H的屏幕數據覆蓋,故保存到buffer2+0x2000
}

void vga_restore(char far* buffer1,char far* buffer2)
  //用buffer2的數據恢復顯存,用buffer1的數據恢復VGA狀態
{
_fmemcpy((void far*)VGA_VRAMT,buffer2+0x2000,0x1000);
  //恢復顯存頭上的4K(頁面0開頭的2K,頁面1開頭的2K)
vga_set_mode(0x92);
vga_wplane_sel(0x2);
_fmemcpy((void far*)VGA_VRAMG,buffer2,0x2000);
  //恢復顯存頁面2的開頭8K

_ES=FP_SEG(buffer1);
_BX=FP_OFF(buffer1);
_AX=0x4f04;
_CX=0xffff;
_DL=0x2;                //子功能2,用ES:BX的數據恢復VGA狀態
geninterrupt(0x10);
}

/************************上面是幾個保存和恢復屏幕的函數**********************/




/************************下面是幾個保存和恢復鼠標的函數**********************/

void mouse_save(char far* buffer)  //保存鼠標驅動程序狀態到buffer
{                       //Warning:Inline keyword will cause an error
_ES=FP_SEG(buffer);
_DX=FP_OFF(buffer);
_AX=0x0016;             //子功能0x16,保存保存鼠標驅動程序狀態到ES:DX
geninterrupt(0x33);     //鼠標驅動程序INT 33H服務
}
void mouse_restore(char far* buffer) //用buffer數據恢復鼠標驅動程序狀態
{
_AX=0x0000;
geninterrupt(0x33);     //先調子功能0x00,RESET鼠標驅動程序
_ES=FP_SEG(buffer);
_DX=FP_OFF(buffer);
_AX=0x0017;             //子功能0x17,用ES:DX數據恢復鼠標驅動程序狀態
geninterrupt(0x33);     //鼠標驅動程序INT 33H服務
}

/************************上面是幾個保存和恢復鼠標的函數**********************/




/**************************下面是有關設置DOS數據的函數***********************/

inline void set_psp(unsigned newpsp) //把DOS當前進程的PSP強行設置為newpsp
{
_BX=newpsp;                //未公開的DOS調用0x50
_AH=0x50;
geninterrupt(0x21);
}

void set_dta(void far* newdta)       //用newdta作為DOS磁盤傳輸區(DTA)
{
asm{
  push ds;
  lds dx,newdta;           //DS:DX=newdta
  mov ah,0x1a;             //INT 21H的1A號功能,把DTA指向DS:DX
  int 0x21;
  pop ds;
  }
}

/**************************上面是有關設置DOS數據的函數***********************/



/*****************下面是一個TSR激活時保存和恢復各種數據的實例****************/

void activate_tsr()
{
_fmemcpy(sda_buf,sda_addr,sda_size);    //保存DOS的SDA數據區.
  //SDA就是DOS的"數據段",包含了幾乎所有DOS的內部數據,包括三個
  //  內部堆棧,當前進程的PSP,INDOS標志,關鍵出錯標志......

  //所以用保存和恢復SDA的辦法就完全不必擔心DOS重入了,在tsr_body()
  //  里可以隨意進行DOS調用

mouse_save(mouse_buf);            //保存鼠標
vga_save(vga_buf1,vga_buf2);      //保存屏幕

set_psp(_psp);                    //把TSR自己的PSP設為DOS當前進程
set_dta(MK_FP(_psp,PSP_DTA));     //把TSR自己的DTA設為DOS當前DTA
*(char far*)indos_addr=0;  //強制把INDOS標志清0
*(char far*)sda_addr=0;    //強制把DOS關鍵出錯標志(恰在SDA的偏移0處)清0

tsr_body();                //做你想做的 :DD

vga_restore(vga_buf1,vga_buf2);   //恢復屏幕
mouse_restore(mouse_buf);         //恢復鼠標
_fmemcpy(sda_addr,sda_buf,sda_size);  //恢復SDA
}

main()   //僅僅是個簡易版,用來說明怎樣獲取sda_size,sda_addr,indos_addr
{
//這里省略了一些重要事務...

asm push ds;
asm mov ax,0x5d06;   
asm int 0x21;        //INT 21H的功能5D06H,返回SDA的地址送DS:SI,大小送CX
asm pop ds;
sda_size=_CX;        
sda_addr=MK_FP(_BX,_SI);
                     //結果存入sda_addr和sda_size

asm mov ah,0x34;
asm int 0x21;        //INT 21H的功能34H,返回INDOS標志的地址送ES:BX
indos_addr=MK_FP(_ES,_BX);
                     //結果存入indos_addr

_ES=*(unsigned far*)MK_FP(_psp,PSP_ENV);
asm mov ah,0x49;
asm int 0x21;        //釋放環境段所占的內存

//這里省略了一些重要事務...
}

/*****************上面是一個TSR激活時保存和恢復各種數據的實例****************/



>>-==============================程序實例:END==============================-<<



                                               Wei Min Luo

                                                   整理于1997.9

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡视频在线看| 久久99精品久久只有精品| 色综合久久久久| 亚洲一区在线免费观看| 欧美日韩精品一区二区三区| 亚洲午夜私人影院| 欧美一级精品在线| 国产一区二区91| 亚洲欧洲精品成人久久奇米网| 91浏览器入口在线观看| 亚洲国产精品久久久久秋霞影院| 91.xcao| 国产一区二区0| 亚洲免费在线播放| 日韩欧美一级在线播放| 国产一区视频在线看| 亚洲色图19p| 欧美电影在哪看比较好| 国产一区二区免费在线| 亚洲美女视频在线| 日韩美一区二区三区| 不卡免费追剧大全电视剧网站| 一区二区三区高清不卡| 精品人在线二区三区| 97se狠狠狠综合亚洲狠狠| 午夜精品福利一区二区三区av | 国产精品欧美久久久久无广告| aa级大片欧美| 日本欧美一区二区三区| 国产网站一区二区| 欧美日韩高清影院| 不卡的av电影在线观看| 日产国产欧美视频一区精品| 中文无字幕一区二区三区 | 国产精品久久久久久久久快鸭 | 欧美三片在线视频观看| 国产一区二区三区日韩| 亚洲国产精品视频| 国产精品久久久久四虎| 欧美一区二区高清| 色老汉av一区二区三区| 国产福利精品一区| 蜜臀久久99精品久久久久久9| 国产精品毛片大码女人| 欧美一区二区三区在线看| 99久久综合精品| 国产一区二区三区视频在线播放| 亚洲一区在线观看免费观看电影高清 | 免费观看在线色综合| 中文字幕制服丝袜一区二区三区| 欧美一级搡bbbb搡bbbb| 在线观看免费亚洲| 97久久精品人人做人人爽50路| 免费不卡在线视频| 亚洲成av人影院| 亚洲黄色免费电影| 国产精品乱人伦中文| 国产日韩欧美精品在线| 亚洲精品在线免费播放| 日韩视频免费观看高清完整版| 精品污污网站免费看| 色婷婷综合久久| 99re亚洲国产精品| 99久久精品情趣| 播五月开心婷婷综合| 国产成人精品在线看| 国产精品一区免费在线观看| 蓝色福利精品导航| 麻豆成人91精品二区三区| 日本午夜精品一区二区三区电影 | 免费欧美高清视频| 美女任你摸久久| 捆绑调教美女网站视频一区| 美日韩一级片在线观看| 久久狠狠亚洲综合| 美女高潮久久久| 久久国产精品一区二区| 久久国产精品第一页| 精品在线免费视频| 国产在线视频一区二区| 国产综合久久久久久久久久久久| 极品尤物av久久免费看| 国产一区二区免费看| 国产成人精品影院| 91啪亚洲精品| 欧洲在线/亚洲| 337p亚洲精品色噜噜狠狠| 日韩美一区二区三区| 久久青草国产手机看片福利盒子| 国产校园另类小说区| 国产精品久久久久久久午夜片 | 国产一区二区不卡老阿姨| 国产在线视频精品一区| 大尺度一区二区| 色八戒一区二区三区| 欧美天堂一区二区三区| 日韩一区二区在线观看视频播放| 欧美v国产在线一区二区三区| 久久天天做天天爱综合色| 国产欧美一区二区精品秋霞影院| 亚洲欧洲美洲综合色网| 亚洲丰满少妇videoshd| 久久99蜜桃精品| 成人av在线影院| 欧美日韩美女一区二区| 久久综合久久鬼色| 最近日韩中文字幕| 日韩电影在线免费观看| 国产盗摄视频一区二区三区| 91影视在线播放| 精品美女在线播放| 亚洲男人的天堂一区二区| 日韩vs国产vs欧美| a级精品国产片在线观看| 欧美挠脚心视频网站| 国产亚洲精久久久久久| 午夜在线成人av| 国产福利91精品一区| 欧美日韩国产片| 欧美韩国日本一区| 日韩精彩视频在线观看| 成人一区二区三区中文字幕| 欧美撒尿777hd撒尿| 久久九九国产精品| 丝袜美腿亚洲综合| 99久久精品久久久久久清纯| 日韩三级av在线播放| 亚洲图片激情小说| 狠狠色狠狠色综合日日91app| 日本韩国精品一区二区在线观看| 精品人伦一区二区色婷婷| 一级女性全黄久久生活片免费| 韩国女主播成人在线观看| 欧美无砖专区一中文字| 中文字幕亚洲精品在线观看| 蜜臀久久99精品久久久久宅男| 色婷婷综合中文久久一本| 久久午夜色播影院免费高清| 性感美女极品91精品| 99国产精品久久久久久久久久| 精品国产露脸精彩对白| 五月综合激情日本mⅴ| 色老头久久综合| 中文字幕亚洲电影| 国产成a人无v码亚洲福利| 日韩欧美精品三级| 日韩精品视频网| 欧美午夜不卡在线观看免费| 亚洲手机成人高清视频| 高清免费成人av| 久久久久88色偷偷免费| 麻豆91小视频| 欧美成人伊人久久综合网| 亚洲成人动漫在线观看| 欧洲精品在线观看| 亚洲精品欧美激情| 色噜噜狠狠成人网p站| 国产精品国产三级国产普通话三级| 国内欧美视频一区二区| 欧美电影免费观看高清完整版在线观看| 亚洲国产精品嫩草影院| 欧美视频精品在线| 亚洲成人动漫精品| 欧美日韩mp4| 日本不卡不码高清免费观看| 3d动漫精品啪啪一区二区竹菊| 亚洲成av人片在线| 欧美一区二区网站| 久久精品国产免费| 欧美白人最猛性xxxxx69交| 另类小说综合欧美亚洲| 欧美精品一区二区在线播放| 精品写真视频在线观看| 久久精品在这里| 成人免费看视频| 国产精品高潮久久久久无| 成人高清免费在线播放| 亚洲免费观看高清完整版在线观看熊 | 亚洲精品免费在线播放| 欧美性xxxxxxxx| 男人的j进女人的j一区| 久久精品一区二区三区av| 高清视频一区二区| 一区二区视频在线看| 欧美日韩电影在线播放| 久久疯狂做爰流白浆xx| 国产亚洲欧美激情| 一本一本大道香蕉久在线精品| 亚洲午夜久久久久久久久电影院| 69堂精品视频| 国产69精品久久99不卡| 亚洲欧美成人一区二区三区| 欧美另类高清zo欧美| 国产精品自拍网站| 亚洲视频一二三区| 日韩一区二区中文字幕| 成+人+亚洲+综合天堂| 国产一区二区精品久久99| 国产精品毛片高清在线完整版| 欧美性大战久久久|