附录D
时间延迟函数
函数名: delay
功能:将程序的执行暂停一段时间(毫秒)
用法: void delay(unsigned milliseconds);
重画屏幕区域的函数
函数名:getimage
功能:将指定区域的一个位图存到主存中
用法:void far getimage( int left, int top, int right, int bottom, void far *bitmap);
函数名:putimage
功能:在屏幕上输出一个位图
用法:void far putimage( int x, int y, void far *bitmap, int op );
图像大小函数
函数名: imagesize
功能:返回保存位图像所需的字节数
用法: unsigned far imagesize( int left, int top, int right, int bottom );
异或模式函数
函数名: setwritemode
功能:设置图形方式下画线的输出模式
用法: void far setwritemode(int mode);
参数MODE可以被设置位COPY_PUT或者XOR_PUT两种模式。当mode被设置为XOR_PUT,其后的图形操作将都采用异或方式。此外之前提到的putimage()函数也可以采用异或模式向屏幕复制图像。
检测键盘输入函数
函数名: kbhit
功能:检查当前按下的键
用法: int kbhit(void);
键盘接口函数
函数名: bioskey
功能:直接使用BIOS服务的键盘接口
用法: int bioskey(int cmd);
该函数通过bois中断0x16执行键盘操作,由参数cmd来决定具体的操作。
Cmd
具体操作
0
读取按键的ascii码
1
测试是否有按键
如果没有按键返回0
如果按键为ctrl+brk返回-1
如果是其他按键返回按键本身键值(直到此按键被取出后恢复0)
2
返回shift key状态
以下是当cmd为2的时候,返回值的具体含义
cmd返回值
触发特殊键
0X01
Left ctrl
0X02
Left alt
0X04
Right ctrl
0X08
Right alt
0X10
Scroll lock
0X20
Num lock
0X40
Caps lock
0X80
Sys rq
bioskey()函数的优点在于:
1.和kbhit()函数一样可以在不影响主程序运行的情况下检测是否有按键;
2.可以方便地检测普通键具体ASCII码和扫描码;
3.可以方便地检测功能键具体扫描码;
4.可以检测特殊按键;
5.只需要一个函数就能解决检测按键和读入按键的任务。
声音与延迟函数
函数名: sound
功能:以指定频率打开PC扬声器
用法: void sound(unsigned frequency);
函数名: nosound
功能:关闭PC扬声器
用法: void nosound(void);
函数名: delay
功能:将程序的执行暂停一段时间(毫秒)
用法: void delay(unsigned milliseconds);
sound()函数用于让pc喇叭发声,nosound()函数用于使正在发声的pc喇叭静音。要使程序中的发声的具体方法,是调用sound()函数并延迟一定时间,然后使用nosound()函数静音,具体语句实现方法如下:
sound(100);
delay(100);
nosound();
产生随即数函数
函数名: rand
功能:随机数发生器
用法: void rand(void);
函数名: random
功能:随机数发生器
用法: int random(int num);
初始化随机数函数
函数名: randomize
功能:初始化随机数发生器
用法: void randomize(void);
in86()函数
函数名: int86
功能:通用8086软中断接口
用法: int int86( int intr_num, union REGS *inregs, union REGS *outregs );
其中intr_num为软中断号,函数通过inregs寄存器向中断发出具体功能命令,函数将中断调用结果返回寄存器outregs。
memset()函数
函数名: memset
功能:设置s中的所有字节为ch, s数组的大小由n给定
用法: void *memset(void *s, char ch, unsigned n);
标准VGA显示模式表
模式(16进制)
适配器
显示类型
颜色
字符格式
屏幕大小
字符大小
缓冲区首址
属性类型
0/1
CGA
文本
16/16
40*25
320*200
8*8
B8000
彩色
EGA
文本
16/64
40*25
320*350
8*14
B8000
彩色
VGA
文本
16/256K
40*25
360*400
9*16
B8000
彩色
CGA
文本
16/16
80*25
640*200
8*8
B8000
彩色
2/3
EGA
文本
16/64
80*25
640*350
8*14
B8000
彩色
VGA(3+)
文本
16/256K
80*25
720*400
9*16
B8000
彩色
CGA
图形
4/16
40*25
320*200
8*8
B8000
彩色
4/5
EGA
图形
4/64
40*25
320*200
8*8
B8000
彩色
VGA
图形
4/256K
40*25
320*200
8*8
B8000
彩色
CGA
图形
2/16
40*25
640*200
8*8
B8000
单色
6
EGA
图形
2/64
40*25
640*200
8*8
B8000
单色
VGA
图形
2/256K
40*25
640*200
8*8
B8000
单色
7
MDA/EGA
文本
单色
80*25
720*350
9*14
B0000
单色
VGA(7+)
文本
单色
80*25
720*400
9*16
B0000
单色
D
EGA
图形
16/64
40*25
320*200
8*8
A0000
彩色
VGA
图形
16/256K
40*25
320*200
8*8
A0000
彩色
E
EGA
图形
16/64
80*25
640*200
8*8
A0000
彩色
VGA
图形
16/256K
80*25
640*200
8*8
A0000
彩色
F
EGA/VGA
图形
单色
80*25
640*350
8*14
A0000
单色
10
EGA
图形
16/64
80*25
640*350
8*14
A0000
彩色
VGA
图形
16/256K
80*25
640*350
8*14
A0000
彩色
11
VGA
图形
2/256K
80*30
640*480
8*16
A0000
彩色
12
VGA
图形
16/256K
80*30
640*480
8*16
A0000
彩色
13
VGA
图形
256/256K
40*25
320*200
8*8
A000
彩色
常规内存函数
申请函数:malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()
函数名: malloc
功能:内存分配函数
用法: void *malloc(unsigned size);
函数名: farmalloc
功能:从远堆中分配存储块
用法: void far *farmalloc(unsigned long size);
函数名: calloc
功能:分配主存储器
用法: void *calloc(size_t nelem, size_t elsize);
函数名: farcalloc
功能:从远堆栈中申请空间
用法: void far *farcalloc( unsigned long units, unsigned ling unitsz );
函数名: realloc
功能:重新分配主存
用法: void *realloc(void *ptr, unsigned newsize);
函数名: farrealloc
功能:调整远堆中的分配块
用法: void far *farrealloc( void far *block, unsigned long newsize );
使用函数:memcpy(),memset(),memmove(),movedata()
函数名: memcpy
功能:从源source中拷贝n个字节到目标destin中
用法: void *memcpy(void *destin,void *source,unsigned n);
函数名: memset
功能:设置s中的所有字节为ch, s数组的大小由n给定
用法: void *memset(void *s, char ch, unsigned n);
函数名: memmove
功能:移动一块字节
用法: void *memmove(void *destin,void *source,unsigned n);
函数名: movedata
功能:拷贝字节
用法: void movedata(int segsrc, int offsrc, int segdest, int offdest, unsigned numbytes);
释放函数:free(),farfree()
函数名: free
功能:释放已分配的块
用法: void free(void *ptr);
函数名: farfree
功能:从远堆中释放一块
用法: void farfree(void);
指针操作函数:MK_FP(),FP_OFF(),FP_SEG()
函数名: MK_FP
功能:设置一个远指针
用法: void far *MK_FP(unsigned seg, unsigned off);
函数名: FP_OFF
功能:获取远地址偏移量
用法: unsigned FP_OFF(void far *farptr);
函数名: FP_SEG
功能:获取远地址段值
用法: unsigned FP_SEG(void far *farptr);
XMS功能调用索引表:
功能号
功能
版本
功能00H
功能01H
功能02H
功能03H
功能04H
功能05H
功能06H
功能07H
功能08H
功能09H
功能0AH
功能0BH
功能0CH
功能0DH
功能0EH
功能0FH
功能10H
功能11H
取XMS版本号
请求高内存区HMA
释放高内存区HMA
全程启用A20
全程停用A20
局部启用A20
局部停用A20
查询A20状态
查询自由扩展内存
分配扩展内存块
释放扩展内存块
移动扩展内存块
锁住扩展内存块
扩展内存块解锁
取EMB句柄信息
重新分配扩展内存块
请求上位存储块UMB
释放上位存储块UMB
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
XMS规范V2.0
EMS功能调用索引:
功能号
功能
功能40H
功能41H
功能42H
功能43H
功能44H
功能45H
功能46H
功能47H
功能48H
功能4BH
功能4CH
功能4DH
取得EMS程序状态
取得物理映射页面的段地址
获取逻辑页页数信息
分配句柄和内存
内存映射
释放句柄和内存
获取EMM的版本号
保存指定句柄映射关系
恢复指定句柄映射关系
获取EMM的句柄数
获取指定句柄所分配的逻辑页页数
取所有句柄分配情况
键盘扫描码表:
键名
扫描码
键名
扫描码
键名
扫描码
Esc
1
A
30
F1
59
! or 1
2
S
31
F2
60
@ or 2
3
D
32
F3
61
# or 3
4
F
33
F4
62
$ or 4
5
G
34
F5
63
% or 5
6
H
35
F6
64
^ or 6
7
J
36
F7
65
& or 7
8
K
37
F8
66
* or 8
9
L
38
F9
67
( or 9
10
: or ;
39
F10
68
) or 0
11
“or‘
40
F11
133
-
12
~ or `
41
F12
134
=
13
Left shift
42
Numlock
69
Bksp
14
\
43
Scroll lock
70
Tab
15
Z
44
Home or 7
71
Q
16
X
45
Up or 8
72
W
17
C
46
Pgup or 9
73
E
18
V
47
Gray -
74
R
19
B
48
Left or 4
75
T
20
N
49
Center or 5
76
Y
21
M
50
Right or 6
77
U
22
< or ,
51
Gray +
78
I
23
> or .
52
End or 1
79
O
24
? or /
53
Down or 2
80
P
25
Right shift
54
Pgdn or 3
81
{ or [
26
Prt sc or *
55
Ins or 0
82
} or ]
27
Alt
56
Del or .
83
enter
28
Space bar
57
ctrl
29
Caps lock
58
键盘ASCII码表
ASCII字符集(0 - 127)
代码
字符
代码
字符
代码
字符
代码
字符
0
32
[空格]
64
@
96
`
1
33
!
65
A
97
a
2
34
"
66
B
98
b
3
35
#
67
C
99
c
4
36
$
68
D
100
d
5
37
%
69
E
101
e
6
38
&
70
F
102
f
7
39
'
71
G
103
g
8
**
40
(
72
H
104
h
9
**
41
)
73
I
105
i
10
**
42
*
74
J
106
j
11
43
+
75
K
107
k
12
44
,
76
L
108
l
13
**
45
-
77
M
109
m
14
46
.
78
N
110
n
15
47
/
79
O
111
o
16
48
0
80
P
112
p
17
49
1
81
Q
113
q
18
50
2
82
R
114
r
19
51
3
83
S
115
s
20
52
4
84
T
116
t
21
53
5
85
U
117
u
22
54
6
86
V
118
v
23
55
7
87
W
119
w
24
56
8
88
X
120
x
25
57
9
89
Y
121
y
26
58
:
90
Z
122
z
27
59
;
91
[
123
{
28
60
<
92
\
124
|
29
61
=
93
]
125
}
30
‑
62
>
94
^
126
~
31
63
?
95
_
127
&127;
**数值8.9.10和13可以分别转换为退格符、制表符、换行符和回车符。这些字符都没有图形表示,但是对于不同的应用程序,这些字符可能会影响文本的显示效果。
ASCII字符集(128 - 255)
代码
字符
代码
字符
代码
字符
代码
字符