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

自研OS无法写入VideoBuffer求助(附完整代码)

0x13视频模式黑屏问题排查要点

1. 确认0x13模式是否成功启动

  • 调用int 0x10设置模式后,必须检查AH寄存器的返回值:0代表成功,非0则说明模式切换失败。可以在调用后通过jc指令判断错误,临时切回文本模式用BIOS中断输出错误提示,先排除模式设置本身的问题。
  • 部分虚拟机对0x13模式的支持有差异,比如QEMU可尝试添加启动参数-vga cirrus或-vga std,验证是否是显卡模拟的兼容性问题。

2. 保护模式段配置校验

  • 确保0xA0000视频缓冲区对应的段描述符配置正确:段基址需设为0xA0000,段限长要覆盖完整VGA显存(0xA0000~0xBFFFF,共128KB),权限需设为可读写、内核级可访问。
  • 检查GDT加载流程:lgdt指令的操作数是否指向正确的GDT描述符结构,进入保护模式后是否重新加载了DS、ES等段寄存器到正确的描述符选择子——段寄存器未刷新会导致显存地址映射错误。

3. 显存写入逻辑检查

  • 0x13模式(320x200 256色)下,像素(x,y)对应的显存地址为0xA0000 + y*320 + x,要确认地址计算是否错误(比如误将步长设为640,那是16色模式的规则)。
  • 若在保护模式下写入,需确认分页是否禁用:如果开启了分页,必须保证0xA0000的物理地址被正确映射到虚拟地址,否则写入操作会指向错误内存区域。

4. 代码执行流程验证

  • 检查bootloader进入保护模式后的跳转逻辑,确认没有提前触发hlt或意外跳转,导致绘制代码未执行。
  • 核对内核加载地址:链接脚本是否将内核代码放在了正确的内存区域,避免覆盖bootloader关键代码或显存空间。

5. 兼容性测试

  • 物理机测试时,部分旧主板要求等待垂直同步后再操作显存;虚拟机测试可切换到VirtualBox或Bochs,对比验证是否是特定虚拟机的适配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:55:04