朴智妍和朴孝敏:谁能详细介绍一下pascal中的crt单元

来源:百度文库 编辑:高校问答 时间:2024/04/27 23:40:00
同上,多谢!!
感谢这位朋友,我的crt已经修正。
但我想问的是crt单元到底有哪些功能,为什么如此多的程序要用到它,它能对pascal程序进行怎样的优化。

期待更多朋友给我一个答复,:)

crt单元
crt单元定义的过程或函数首部形式及说明

过程或函数首部形式 说明
procedure assigncrt(var f:text); 将文本文件f与显示器CRT建立联系
function keypressed:boolean; 检测是否有键按下,有则函数值为true
function readkey:char; 等待从键盘输入一个字符
procedure textmode(mode:integer); 设置字符显示模式,mode值见下表,可以用常量标识符或常数值
procedure window(x1,y1,x2,y2:byte); 定义字符窗口:(x1,y1)为左上角坐标,(x2,y2)为右下角坐标;必须在设置模式允许范围内.窗口定义后,所有显示均在窗口进行
procedure gotoxy(x,y:byte); 将光标移至(x,y)处
function wherex:byte; 返回当前窗口中光标所在的列数(相对当前窗口)
function wherey:byte; 返回当前窗口中光标所在的行数(相对当前窗口)
procedure clrscr; 清除当前窗口或屏幕
procedure clreol; 从光标位置开始清除至本行末尾(不超过窗口右边界)
prlcedure insline; 在当前光标处插入一行
procedure deline; 删除光标所在的当前行
procedure textcolor(color:byte); 设置正文前景颜色
procedure textbackground(color:byte); 设置正文背景颜色
procedure lowvideo; 选择低亮度显示字符
procedure highvideo; 选择高亮度显示字符
procedure normvideo; 选择正常亮度显示字符
procedure delay(ms:word); 等待或延迟ms个毫秒
procedure sound(hz:word); 以hz指定的频率发声
procedure nosound; 关闭内部扬场声器
显示模式常数表

常量标识符 常数值 显示模式
BW40 0 彩色显示卡40*25黑白模式
CO40 1 彩色显示卡40*25彩色模式
C40 1 同上,用于兼容3.0版本
BW80 2 彩色显示卡80*25黑白模式
CO80 3 彩色显示卡80*25彩色模式
C80 3 同上,用于兼容3.0版本
Mono 7 单色显示卡80*25模式
Font 8*8 256 用于ROM字模
前景和背景颜色常数表

常量标识符 常数值 颜色 前景 背景 常量标识符 常数值 颜色 前景 背景
Black
Blue
Green
Cyan
Red
Magenta
Brown
LightGray 0
1
2
3
4
5
6
7 黑

绿


洋江

浅灰 Y
Y
Y
Y
Y
Y
Y
Y Y
Y
Y
Y
Y
Y
Y
Y DarkGray
LightBlue
LightGreen
LightCyan
LightRed
LightMagenta
Yellow
White 8
9
10
11
12
13
14
15 深灰
浅灰
浅绿
浅青
浅红
浅洋红

白 Y
Y
Y
Y
Y
Y
Y
Y
Blank 128 闪烁
crt单元中的变量

变量名 类型 单元中作用
checkbreak boolean 程序在执行下一个write或writeln语句之前是否做Ctrl+Break检查
checkeof boolean 允许文件结束的Ctrl+Z检查
directvideo boolean 为true时采用直接访问视频内存方式
checksnow boolean 为true时进行雪花过滤控制
lastmode word 保存上一次显示模式
textattr byte 保存当前的正文前景与背景颜色
windmin word 保存当前窗口左上角坐标(低字节为列坐标,高字节为行坐标)
windmax word 保存当前窗口右下角坐标(低字节为列坐标,高字节为行坐标)
  crt单元主要用于正文模式下字符的显示和正文窗口的设置.显示器一屏可以显示25(行)*80(列)个字符.每个字符除自身的字形外还有字符本身的颜色(称为前景色)和字符空白区的底色(称为背景色).字符和颜色信息被存贮在特定的显示存贮区内.每一个字符信息占用两个字节:第一个字节存贮该字符的ACSII码值,而第二个字节则存贮该字符的前景色,背景颜色等属性信息.属性字节的含义见下:
bit0~bit2:前景颜色(bit0:Blue;bit1:Green;bit2:Red)
bit3:高亮度(Brightness)
bit4~bit6:背景颜色(bit4:Blue;bit5:Green;bit6:Red)
bit7:闪烁(Blinking)
例:设置屏幕为25行*40列正文模式,并改变字符的前景颜色和背景颜色.
program testtext(output);
  uses crt;
  begin
    textmode(c40);
    textbackground(blue);
    textcolor(red);
    writeln('text mode test');
    textbackground(green);
    textcolor(blink+yellow);
    writeln('blink test');
  end.

几年前写的,看看对你有没有帮助,以下是节选:

DOS游戏怀旧全攻略 第五章 捣乱的喽罗

除去前几章提到的问题,还有很多杂七杂八的喽罗影响游戏的正常运行,下面是老狼曾经遇到过的麻烦,希望对大家有所帮助。问题尽量从原理上加以解释,以适合各种需要的玩家。

1、CPU

运行exe时出现Runtime error 200 at xxxx-xxxx,比如仙剑的install.exe,新蜀山剑侠的mark.exe。

多数情况下,这是因为这个exe是采用Borland Pascal 7.0编译的,要解释这个问题,就不得不说说Borland
Pascal的历史。使用Borland Pascal
6.0编译的程序并没有这样的问题,但是这些程序的延迟(delay)在快速计算机上却是完全错误的。BP7修正了这个问题,却带来了更大的隐患:BP7编译出来的所有使用系统CRT单元的程序在比较快的计算机上都会出现Runtime
Error 200错误。很可怜,几乎所有的程序都会用到CRT单元。
下面是这个错误的一些解释:CRT单元在初始化时,会初始化delay
procedure,delay初始化时,会使用内存地址为40:6C的每秒钟跳动18.2次的BIOS定时器,来计算55毫秒(1/18.2)需要多少条IRET空指令。这个数字会被除以55来得到能延迟1毫秒的数字,计算的结果被写到一个2字节的变量里。这个变量的溢出就导致了Runt
ime Error 200。Runtime Error 200的含义是Division by
zero,但在这里它是由溢出引起的。由此可见,比较快的计算机很可能导致这个错误。

既然知道了问题的起因,解决办法也就有了——或者修正错误,或者给CPU降速。直接修正错误的软件并不好找,而且对压缩过的或加密过的exe无能为力,有时间的朋友可以找一个叫PROT
200的TSR程序,它可以自动使后面有CRT单元问题的程序正常运行,而不需修改文件本身。我们主要考虑第二种方法。http://www.thaisoft
ware.co.th/ftp/slowdown.com是一个很好的DOS下的降速软件(还可以降Windows的速度)。选项很多,有热键和命令行两种方式。我们可以在游戏开始前运行它,随时按Ctrl+Alt+5键就可将速度降低50%,Ctrl+Alt+0就是恢复原来的速度。另外,每按一次Ctrl+Alt+加号键可以增加10%的速度,每按
1617 一次Ctrl+Alt+减号键可以减少10%的速度。如果热键无效,用SLOWDOWN /P:55
install命令就可以以55%的速度来运行install程序。有些游戏速度太快,没办法正常玩,用它也可以解决了。如果你觉得麻烦,可以在BIOS中把CPU的一级缓存CPU
Internal Cache设成Disabled,这样也可以极大的降低速度。

以上。
找的老狼