大约15年前,我曾经自娱自乐,并通过编写直接修改显示器上文本的错误代码来惹恼我的CS老师.这可以通过在配备VGA的PC兼容机上访问0xB8000的视频内存来轻松完成.
快进到今天,我决定通过调试端口尝试我的旧技巧,让我可以访问读取物理内存.令我满意的是,它仍然在我尝试过的第一个平台上工作.然后,令人沮丧的是,我发现它不适用于许多其他系统.它似乎不适用于所有系统都有UMA(共享内存)图形.
因此,对于所有BIOS编写者,低级操作系统人员和视频驱动程序专家的问题 - 如果我在具有共享图形内存的PC兼容系统上的常规80x25颜色文本模式,在实模式下,以及0xb8000 - 0xB8FFF都是0xFF,而不是给我屏幕上的内容,屏幕缓冲区在哪里?
Dav*_*vid 14
啊,如果它是一个BIOS屏幕,那么所有的赌注都会关闭.事实上,它是带有集成显卡的主板上的BIOS,更倾向于视频陌生.
在所有可能的情况下,"经典"VGA功能适用于所有模拟的意图.使用外部视频卡,这对BIOS来说是不可见的 - 它仍然可以看到VGA视频卡.但硬连线到视频卡的BIOS不需要设置假的VGA层和旧学校20位地址空间内存映射只是为了在屏幕上粘贴一些文本.
相反,BIOS可以直接与卡接口(通过某种专有模式),直到操作系统实际上将被启动,此时它自己进行内存映射.这样做的一个主要优点是,对于共享主内存的卡,如果你的RAM安装不正确,你就不会在启动时出现空白屏幕(相反,视频卡的预设BIOS模式可能会使用通常为某些其他目的保留的缓冲区,允许你进入BIOS并看到安装了0MB的RAM)
所述CGA(彩色图形适配器)和MDA(单色显示适配器)卡用于不同的区域。一个(颜色)在0xB8000 处;但单色从0xB0000开始。请记住,您可以同时在机器上激活两个显示器。
请参阅DOS 内存映射(尽管它在CGA的偏移量中有一个错字- 应该是 8000h 而不是 0800h)。
就VGA(视频图形阵列)而言,它的内存开始较低,在0xA0000处的 640K 边界处,并持续到 64K - 但它可以超越,因为该卡最多可以有 256K。一些用于编程 VGA 的示例代码在这里。但它并不那么简单,因为它有多种视频模式。你可以试试这里寻求帮助。
你确定你有 VGA,而不是 EGA、XGA 或 Super-VGA?所有这些都有略微不同的语义......但是,我很确定其中任何一个都应该将文本放在0xB0000或0xB8000 处。当你输入时会发生什么
MODE MONO
Run Code Online (Sandbox Code Playgroud)
或者
模式CO80
-- 这会影响显示吗?这些会在 DOS 下从一种适配器文本模式切换到另一种。