如何在Windows 10运行采用MS-DOS图形模式的Turbo Pascal代码?
旧Turbo Pascal图形程序运行问题解决
我有一段早年写的Turbo Pascal代码,现在想在Windows 10的VirtualBox里通过DOSBox版Turbo Pascal运行,但程序窗口总是打开后立刻关闭。代码里用到了图形库的InitGraph函数,还有通过中断33h处理鼠标光标的汇编代码,具体代码如下:
Uses crt, graph; Procedure Grafika (sterownik,tryb:integer; autodetect:boolean;Path:String); begin if autodetect then sterownik:=detect; InitGraph(sterownik,tryb,Path); end; // 调用方式 Grafika(1,1,True,''); // 鼠标光标控制函数 Procedure VisibleCur(a: boolean); Begin if a then asm mov ax, 0001h int 33h end else asm mov ax, 0002h int 33h end; end;
以下是具体的解决步骤:
解决窗口闪退问题:DOS程序运行完毕后会自动退出,需在主程序末尾添加暂停代码,让程序执行完后停住。比如用
ReadKey等待任意键输入:begin // 你的主程序逻辑 Grafika(1,1,True,''); // ...其他代码 ReadKey; // 等待按键再退出 end.修正图形初始化参数:
- 当
autodetect设为True时,sterownik会被自动设为detect,此时tryb应设为0,让系统自动匹配合适的图形模式,而非固定为1; Path参数不能为空,必须指定BGI图形驱动文件的路径(通常在Turbo Pascal安装目录的BGI文件夹下)。假设TP安装在C:\TP,调用代码应改为:Grafika(1, 0, True, 'C:\TP\BGI');
可以用
GraphResult函数检查图形初始化是否成功,方便排查错误:var grErr: Integer; begin Grafika(1,0,True,'C:\TP\BGI'); grErr := GraphResult; if grErr <> grOk then begin Writeln('图形初始化失败: ', GraphErrorMsg(grErr)); Readln; Halt(1); end; // ...后续代码 end.- 当
鼠标中断的注意事项:
中断33h是DOS下的鼠标服务中断,需确保DOSBox中加载了鼠标驱动。如果鼠标功能失效,可在DOSBox命令行先执行mouse.com(一般在DOSBox系统目录或TP安装目录下)加载驱动。
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

