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

Dosbox中QB45调用MS-DOS中断检测鼠标失败问题咨询

QB45调用INT &H33检测鼠标失败的解决思路
  • 检查RegType结构定义是否完整
    QB45中调用INTERRUPT需要正确的寄存器结构体,若RegType定义缺失关键寄存器,会导致中断返回值读取错误。确保代码开头包含完整的类型定义:

    TYPE RegType
        ax AS INTEGER
        bx AS INTEGER
        cx AS INTEGER
        dx AS INTEGER
        si AS INTEGER
        di AS INTEGER
        bp AS INTEGER
        ds AS INTEGER
        es AS INTEGER
        flags AS INTEGER
    END TYPE
    

    不完整的结构体可能让Regs.ax读取到错误值,误判为&HFFFF。

  • 确认DOSBox鼠标驱动状态
    DOSBox默认加载鼠标驱动,但自定义配置可能禁用该功能。检查dosbox.conf的[dos]板块,确保mouse=true,且memsize设置不低于16M。也可以在启动QB45前手动执行mouse.com加载驱动,再运行程序测试。

  • 切换到图形模式再检测鼠标
    部分MS-DOS鼠标驱动在文本模式下对INT &H33的0号初始化功能支持不佳,而QBASIC IDE本身运行在图形模式,所以鼠标可用。可以先切换到图形模式再执行检测:

    SCREEN 12 ' 切换至VGA 640x480图形模式
    DIM Regs AS RegType
    Regs.ax = &H0
    CALL INTERRUPT(&H33, Regs, Regs)
    IF Regs.ax = &HFFFF THEN
        PRINT "ooops! No Mouse!"
        SYSTEM
    ENDIF
    
  • 移除STATIC修饰Regs变量
    STATIC变量会保留上一次运行的残留值,可能导致Regs.ax未被正确初始化为&H0就调用中断。将STATIC改为DIM,确保每次调用都使用全新的寄存器变量:

    DIM Regs AS RegType
    Regs.ax = &H0
    CALL INTERRUPT(&H33, Regs, Regs)
    
  • 交叉验证其他鼠标中断功能
    若初始化功能返回&HFFFF但鼠标实际可用,可以尝试调用INT &H33的&H3号功能(获取鼠标位置)来验证。如果该功能能正常返回坐标,说明驱动对0号功能的返回值处理特殊,可跳过Regs.ax的判断,直接用功能可用性检测鼠标。

内容的提问来源于stack exchange,提问作者jeancallisti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:06