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
相关产品推荐
相关产品推荐

