|
initgraph()显示模式控制函数(初始化图形系统函数)
功能:把图形适配器设置为一种图形模式,将选择的图形驱动程序(在BGI文件中)装入到内存。
调用方式:
void far initgraph(int far *driver,int far *mode,char far*path)
其中: *driver可以是数值(0-10),也可是符号值(DETECT、CGA、MCGA、EGA、EGA64、EGAMONO、RESERVED、HERCMONO、ATT400、VGA、 PC3270)。
*mode参数从图形系统为各种常用的图形适配器设置的图形模式中(CGAC0、…、IBM8514HI--见头文件graphics.h)选取。常用的有:VGAMED或1(640×350)(等效于BIOS的模式15)、EGAHI或1(640×350)等。
path指向的字符串为装入驱动程序的路径。如果缺省路径,驱动程序在当前目录。
结束方法:
①void far closegraph()函数用于当程序还要继续在字符模下运行时。它释放由图形函数所占用的内存,同时把屏幕模式恢复为调用initgraph()之前的模式。
②void far restorecrtmode()函数用于结束运行。将图形适配器设置到原来的模式。任何分配的内存都将自动释放。
头文件:graphics.h
inport()从端口中读入一个字的函数
原形:int inport(int portid)
调用方式:整型变量=inport(0x端口号);
功能:从指定端口地址读一个字。
头文件:dos.h
inportb()从端口读入一个字节的函数
原形:unsigned char inportb(int portid)
调用方式:字符变量=inportb(0x端口号);
功能:从指定端口地址读一个字节。
头文件:dos.h
int86()执行中断函数(调用8086软中断函数)
原形:int int86(int intno,union REGS *inregs,union REGS *outregs)
调用方式:int86(中断号,&输入指针名,&输出指针名)
返回值:中断处理结束时的AX寄存器的值,错误时outregs->x.cflag!=0
功能:函数int86() 用来执行指定的8086软中断。首先把输入指针所指的共用体中的内容拷贝到CPU 的寄存器中,随即产生对应的中断,返回后将CPU寄存器(AX)的内容拷贝到输出指针指向的共用体中。在使用int86() 函数进行BIOS接口的系统调用时,有的中断调用设有若干选择项,这些选择项可以根据调用时AH寄存器中的值来进行访问。
注:1.需先定义 union REGS 输入指针名,输出指针名;
2.向寄存器传递入口信息
输入指针名.x.寄存器名=要赋的值(入口信息);
3.调用int86后得接受出口信息
变量名=输出指针名.x.寄存器名
4.REGS的定义(在dos.h中):
struct WORDREGS{unsigned int ax, bx, cx, dx, si, di, cflag, flags;}
struct BYTEREGS{unsigned char al, ah, bl, bh, cl, ch, dl, dh;}
union REGS{struct WORDREGS x;struct BYTEREGS h;}
头文件:dos.h
int86x()执行中断函数 (通用8086软中断接口函数)
头文件:dos.h
原形:int int86x(int intno,union REGS *inregs,union REGS *outregs,struct SREGS * segregs)
调用方式:int86x(中断号,&输入指针名,&输出指针名,&段寄存器指针名);
注1:需先定义 union REGS 输入指针名,输出指针名;
union REGS 示意图
struct struct
WORDREGS BYTEREGS
┌ ┌───────┬──────┐──┬── ┐
│ │ │ al │ 1 byte │
│ │ ax ├──────┤──┴─ 2 bytes
│ │ │ ah │ │
│ ├───────┼──────┤───── ┘
│ │ │ bl │
│ │ bx ├──────┤
│ │ │ bh │
│ ├───────┼──────┤
│ │ │ cl │
│ │ cx ├──────┤
│ │ │ ch │
│ ├───────┼──────┤
│ │ │ dl │
│ │ dx ├──────┤
│ │ │ dh │
union regs├───────┼──────┤
│ │ │ │
│ │ si │ │
│ │ │ │
│ ├───────┤ │
│ │ │ │
│ │ di │ │
│ │ │ │
│ ├───────┤ │
│ │ │ │
│ │ cflag │ │
│ │ │ │
│ ├───────┤ │
│ │ │ │
│ │ flags │ │
│ │ │ │
└ └───────┴──────┘
│ x 两个结构变量 h │
└── 共享同一存储域 ──┘
其中字段flags对应于标志寄存器。字段cflag仅对应于进位标志位,函数在调用时不用该字段,只在返回时设置这个字段,因为许多BIOS服务都是通过进位标置为0还是1来表示成功还是失败。
注2:需先定义 struct SREGS 段寄存器指针名;
结构SREGS定义如下
struct SREGS {unsigned int es,cs,ss,ds}
函数只用了该结构中的段寄存器DS和ES。调用时根据它们的值设置DS和ES,同时把DS和ES原来的值保存在这个结构中,返回时再恢复DS和ES为原来的值,这就允许程序使用远指针或大数据编译模式。
该函数置全局变量_doserrno等于寄存器AX中的值,其返回值也等于AX中的值。
注3:向寄存器传递入口信息
输入指针名.x.寄存器名=要赋的值(入口信息);
注4:调用int86x后得接受出口信息
变量名=输出指针名.x.寄存器名
intdos()通用dos中断接口函数
原形:int intdos(inregs,outregs)
union REGS *inregs;//调用时的各寄存器的值
union REGS *outregs;//返回寄存器的值
功能:产生DOS软中断
注意:如果需要功能号,则装入AH;如果需要子功能号,则装入AL。
头文件:dos.h
更多内容请看C/C++进阶技术文档专题,或
上一篇:在linux下使用c语言操作临时文件
下一篇:嵌入式程序员应知道的几个基本问题
|