问题标签 [vesa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
688 浏览

c - OSDEV:我如何使用 vesa 模式?

嗨,我正在尝试在我的操作系统中使用 vesa 模式,我正在使用本教程: 在保护模式下绘图

我得到了切换的分辨率,但我不知道如何绘制像素。

这是我的代码:

内核.asm

内核.c

先感谢您

0 投票
1 回答
32 浏览

graphics - 在 DOSBox 下列为支持的无法识别的视频模式

我注意到使用 VGA/VESA 编程的 DOSBox 中出现了一些相当奇怪的问题。

运行 VESA BIOS 函数 01h,然后将偏移量 14 处的值所指向的列表的条目打印到缓冲区中,直到达到 -1 时打印以下条目:

在 TurboC++ for DOS 中执行此操作的代码是:

基本上,我不明白这些模式中有很多是什么。其中一些,例如高达 117,我可以找到文档,但对于其中的很多,例如 150 和超过 200 的所有内容,我找不到任何关于这些模式实际是什么的迹象。谁能帮我解决这个问题?

0 投票
0 回答
59 浏览

assembly - 无法返回 VBE 模式信息

我终于设法设置了一个 VBE 模式,它工作得很好。
现在我想获取线性帧缓冲区的物理地址以开始在我的内核中绘制像素等...

为此,我使用该函数01h返回 VBE 模式信息,但它不起作用。

这是我的代码的一部分:

0 投票
2 回答
191 浏览

assembly - 将水平和垂直线绘制到 VBE 返回的 LFB 的结果不正确

我终于设法使用 VESA BIOS Extensions (1920px * 1080px, 24bpp) 在屏幕上绘制了一个青色像素。

我尝试以这种方式使用“for循环”在屏幕上绘制一条青色水平线:

但是,这不起作用:它会画一条绿线。


当我尝试使用绘图/绘图像素代码再次绘制垂直线时,它也不起作用。它在各处绘制具有随机颜色的像素。以下是我使用该DrawPixel函数绘制垂直线的方法:

有什么办法可以解决这些问题?

0 投票
1 回答
157 浏览

c - 如果我在内核中添加一个 while 循环,Qemu 会重新启动

我写了一个当键盘控制器未准备好时挂起的while循环:

但是现在每次我尝试启动内核时 qemu 都会重新启动。有时我可以在很短的时间内看到 vga 输出。我试图删除 inb,它仍然会重新启动,除非我删除它

编辑:

这是完整的代码:

当我尝试在其中运行我的内核时,bochs 抛出了这个错误:

INT32 也来自这里:https ://gist.github.com/carlosascari/35dba95ee3118ebf61f4bd1625f4fa11

0 投票
1 回答
148 浏览

assembly - 如何使用 vga 调色板

我切换到 VESA 模式 105h,这是一种 256 色模式。当我使用 AX = 4F09h 检查调色板数据时,我得到的值与屏幕上显示的颜色相匹配。

当我将模式切换到 118h(16.8M 颜色模式)时,我检查了调色板表,即使显示的颜色不同,相同的值仍然存在。

如何获取我切换到的新模式的调色板数据?或者,也许我没有正确理解整个概念。有人可以向我解释如何获取特定模式的调色板值吗?

0 投票
1 回答
240 浏览

c - VESA 图形页面在保护模式下翻转

我试图弄清楚在 32 位保护模式下页面是如何翻转的。我运行0x4F0A并将输出表存储在0x00008100. 设置 LFB 位置的命令应该位于,我是否正确0x00008102?知道这是该命令的位置,我将如何在不返回实模式的情况下更改 C 中 LFB 的位置?

0 投票
1 回答
339 浏览

x11 - X11 (xorg) 无法设置/更改分辨率 (linux x86)

我正在尝试将 10 英寸触摸屏(原始分辨率:1280x800)切换到 1024x768,但我尝试的所有操作都被忽略或导致错误。据报道,显示器支持分辨率,但xrandr --verbose报告(我使用的是默认的 VESA 驱动程序):

如果我尝试通过更改分辨率xrandr --output default --mode 1027x768,我会得到:

据我所知,只有第二行与我的问题有关;我不知道为什么xrandr要配置crtc 0,但我只连接了触摸屏。

失败了,我尝试直接使用以下配置模式xorg.conf

不幸的是,这不起作用,要么Xorg.log显示以下内容:

为什么这不起作用?还有什么我可以尝试让显示器切换到 1024x768?

我已将完整的日志文件上传到Pastebin

0 投票
0 回答
92 浏览

operating-system - 如何为我的操作系统编写自己的视频驱动程序?

在我编写自己的操作系统时,我想到了这个问题!

是否可以编写自己的视频驱动程序,如 VGA、VESA(在 BIOS 中)和 GOP、UGA(在 UEFI 中),如果是,那么如何?

0 投票
1 回答
41 浏览

c - VESA 在尝试填满屏幕时跳过视频内存的“块”

我正在开发一个简单的操作系统内核,并且我正在尝试制作一个可以工作的视频库,以便以后可以使用它。(VBE 版本 3.0,1920 * 1080px,32bpp)。
我在 C 中编写了一个像素绘图函数,它似乎工作正常:

for然后我尝试使用这个函数和两个循环来填充整个屏幕:

这是我到目前为止得到的结果:

在此处输入图像描述


(我什至尝试用 0xFF 填充视频内存中的每个单个字节,以确保我没有改变其他像素或东西:P......而且,呃......我得到了相同的结果。)

知道为什么这不起作用吗?我是否以错误的方式访问内存?


编辑:

MODEINFOBLOCK结构: