首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带图形的Bochs

带图形的Bochs
EN

Stack Overflow用户
提问于 2013-06-08 07:37:33
回答 1查看 1.8K关注 0票数 4

我在Linux上使用Bochs。它工作得很好,但有一个问题我还没有设法解决。我得到vga-信息(可用模式,线性帧缓冲器(LFB)地址),然后切换到1024*768*24在真实模式。根据vga模式118 h (1024*768*24)支持,而LFB是从E 000:0000(即E0000由于段:偏移,或0xE 00000在平面寻址,但该内存不存在,因为它几乎是3.5Gb)。稍后,我切换到保护模式(PM)并将数据写入E0000,但没有出现像素。如果我写信给0xE0000000,也不会。但是,如果我写到A0000,它们就会这样做,但是只映射了一个0000-C0000内存(128 is )。我想使用PM,因为32位和LFB (没有分页)。我知道低分辨率(例如320*200*256)的视频被映射到A0000。在Bochs中,启用了vbe (vga: extension=vbe)。bochsout.txt说"VBE Bochs显示扩展已启用“。

问题是:为什么视频是来自A0000而不是来自E0000?为什么只有128 is的视频?(应该是: 1024*768*3字节,即2.25兆字节)

这样,在不分页的情况下,就不能在PM中完成任何图形,或者我正在做一些错误的事情。

谢谢你,罗伯

我在Adaptor发现了一些东西:

“使用线性帧缓冲区(LFB)

当使用线性帧缓冲区时,BGA以线性方式公开所有图形内存。在较早版本的Bochs和QEMU中,位置固定在0xE0000000 (VBE_DISPI_LFB_PHYSICAL_ADDRESS)。但是,当Bochs被配置为模拟PCI视频卡而不是ISA卡时,帧缓冲区的地址不再固定,而是可以从设备0x1234:0x1111的第一个PCI条中读取以启用LFB,在启用VBE扩展时使用VBE_DISPI_LFB_ENABLED标志(0x40) (因此可以写入VBE_DISPI_ENABLED \ VBE_DISPI_LFB_ENABLED (0x41)的值)。

QEMU不注意VBE_DISPI_LFB_ENABLED标志。线性帧缓冲区和内存库在任何时候都是可用的。Bochs注意国旗。在LFB模式下,它会忽略更改银行的请求,并且在写入银行内存时不会发生任何事情。在银行模式下,当您写入LFB内存时,不会发生任何事情。“

我不理解这个0xE0000000,因为Bochs支持最大1Gb内存,而且这要多得多。顺便说一下,通过编译带有--启用- vbe的Bochs来启用vbe,应该在bochs中使用"vga: extension=vbe“。

找到解决方案(在设置vbe模式时设置位"use“):

mov,4F02h;设置vbe模式

mov bx,118 h;模式1024*768*24

或bx,01000000000000b;设置位14(使用LFB)

int 10h

而LFB来自0xE 0000000,正如vga-modeinfo-block所说的那样。

EN

回答 1

Stack Overflow用户

发布于 2016-07-22 18:36:35

不同的视频模式有不同的视频存储器地址,尝试使用INT0x10来改变真实模式下的视频模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16997250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档