You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.
    
  • 修正图形初始化参数:

    1. 当autodetect设为True时,sterownik会被自动设为detect,此时tryb应设为0,让系统自动匹配合适的图形模式,而非固定为1;
    2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:11:21