问题标签 [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 回答
1521 浏览

assembly - 在 VESA 图形模式下绘制像素

如何在 VESA 图形模式下绘制像素?

我正在尝试中断10h功能0ch,但它不起作用。怎么了?

(注:我用 NASM 语法写了这段代码,并用 qemu 测试过)

0 投票
1 回答
620 浏览

assembly - 带有 NASM 故障的 x86 汇编 VGA 图形?

如果这个问题看起来有点愚蠢,我提前道歉......

我目前正在开发一个简单的 16 位实模式操作系统,使用 x86 程序集(NASM)和 Ubuntu Mate Linux 16.04.3 LTS 作为我的开发平台和用于调试系统的 Virtualbox。到目前为止编写的引导加载程序和底层内核代码工作正常,但是我似乎遇到了我正在编写的图形代码的一些问题。我已经通过 INT10h 切换到 640x480x256 分辨率的 SVGA:

然后将控制权转移回内核,该内核将像素的颜色保存在 dl 寄存器中的下一个函数(我遇到问题的那个)并调用该函数:

现在我遇到的问题是,当运行以下代码时,每次切换视频内存库时,它似乎都会掩盖 dl 寄存器所持有的字节,并且会改变每个库的颜色,或者整个屏幕是纯黑色。这是代码:

我为什么要在 Services.svga.draw_background 函数运行之前设置 dl 背后的想法是,操作系统最终将能够加载配置文件,这些配置文件将为应用程序和菜单设置配色方案,从而使系统更具可定制性。

我已经尝试了一切:我找到了银行切换的不同方法,直接在 .start_bank 中设置 dl 等。没有任何效果,经过详尽的研究后我找不到任何东西。显然,如果我在银行切换期间不存储 dx 的值,即使存在导致系统进入无限循环的指令“inc dx”,它也永远不会改变,并且当银行切换正常工作时,改变值的行为dx 的值也以某种方式改变了 dl 的值......有谁知道如何解决这个问题?

0 投票
1 回答
550 浏览

assembly - 在程序集中设置显存VGA/VESA的自定义基地址

我开始在 32 位保护模式下编程。我将它用于高图形分辨率,如 1280x1024 256 色:

但我对视频内存 (VRAM) 的大小有疑问,因为切换到此分辨率后,我需要 1,280 * 1,024 = 1,310,720 字节的 VRAM,但标准 BIOS VRAM 只有 131,072 字节宽(地址范围:0xa0000-0xbffff)。有什么方法可以扩展 BIOS VRAM 或设置我的 VRAM 自定义基地址?(我想绕过编写自己的驱动程序。)

0 投票
1 回答
1038 浏览

assembly - 切换到 VESA/VBE?

所以,我目前正在开发一个操作系统,我陷入了一个非常愚蠢的境地:切换到 VESA/VBE

我当前的代码:

它改变了 Qemu 的分辨率,但现在我在绘制像素时遇到了问题。像素偏移的公式为:

问题是 bpp、pitch 和 framebuffer 应该由

第一的,

软锁qem。即使没有,我该怎么做才能访问信息。

我想要的是一个切换到 VESA/VBE 的函数,它完全用汇编(nasm)编写,然后用我的内核可以访问的 c 编写的函数。

编辑:我真的不能在我的引导加载程序中包含任何 C。我需要汇编代码。

0 投票
1 回答
224 浏览

assembly - 在启动时切换到 1024x768x24bpp(裸机操作系统)

一段时间以来,我一直对了解 Bare Metal OSes 很感兴趣,并发现了 Eugene Obrezkov 的这个很棒的 GitHub,它提供了一个在 QEMU 中工作的基本文本 shell。我无法让它在 VirtualBox 中运行。

https://github.com/ghaiklor/ghaiklor-os-gcc

我想扩展它并添加一个以 1024x768x24bpp 运行的简单启动启动画面。在现代计算机上这样做的标准方法是什么?

这个问题虽然就像问几个问题一样。:(

我应该阅读有关 VBE3 的内容吗?我有一份正在阅读的文件:

https://pdos.csail.mit.edu/6.828/2011/readings/hardware/vbe3.pdf

我还看了一下这个 SE,它说不使用 VBE3,它涵盖了一些关于 UEFI 中的图形模式的信息,它是否适用于我将在 QEMU 或 VirtualBox 中测试的裸机操作系统?

程序集 - 如何在 UEFI 中设置图形模式(无 VGA、无 BIOS、不推荐使用)

如果基于 Eugene 的初始来源的答案是使用 VBE3 或 UEFI,我需要处于真实、受保护或长期的哪种模式?这是我在模式之间切换时发现的:

https://www.codeproject.com/Articles/45788/The-Real-Protected-Long-mode-assembly-tutorial-for

0 投票
1 回答
93 浏览

operating-system - 什么是 1920x1080x24bpp OS Dev 的标准 VESA 视频模式

我正在开发一个小型操作系统,我刚开始使用 1280x1080 视频模式(模式 11Bh)来获得分辨率。现在我想要更好的东西,因为模式 11Bh 有点受压,而且它的比率很好。所以我开始搜索 1920x1080 视频模式,但在论坛和 OSDev 中找不到。模式 1920x1080x24bpp 的标准模式编号是什么,特殊的完全访问模式 81FFh 与它有什么关系?

0 投票
1 回答
199 浏览

nasm - 获取 VBE 信息

最近,我开始在我的操作系统中使用 vbe 进行图形处理。在实模式下,vbe 信息块结构返回指向视频模式列表的指针。当我查看这个指针的十六进制值时,它看起来像这样:它是一个双字值

我想知道如何以实模式获取此地址的数据,因为我无法访问该地址。有谁知道如何做到这一点?

0 投票
0 回答
74 浏览

kernel - 尝试检索 VBE BIOS 信息时的 OS DEV 垃圾文本

我正在尝试开发自己的概念验证操作系统。只是一些基础知识。我刚开始使用 vbe 进行图形处理。我遇到的一个问题是获得支持的视频模式。经过深入研究,我发现 vbe get bios information (ax=4f00 int 10) 我实现它如下

这是真实模式

并在实模式下声明如下 vbe_info 结构

然后我将它的地址作为这样的参数传递给我的内核(32 BIT !!!)

我的简单内核代码是这样的(32 BIT)

来自 printf 的例外输入应该是“V”,但我得到了 junk S 和一些 ascii junk 只有 2 个字符。

0 投票
2 回答
528 浏览

c - 从 Int 10h/AX=4F00h 检索 VESA 视频模式列表

我正在尝试开发一个概念验证操作系统。但是,在此过程中,我遇到的问题之一是 vesa 视频模式。在 vesa 告诉我们从 vbe bios 信息中获取它们并找到适合我们需要的视频模式编号之后,似乎缺少硬编码的视频模式编号。但是我无法接收视频模式,因为我不知道如何vbeFarPtr在 32 位的 C 内核中使用

这是我的内核代码:

VbeInfoBlock在接收到 int 0x10 ax=0x4f00 的信息后,我将 a 作为参数从我的第二阶段引导加载程序传递给内核

如果您不知道,则 VbeInfoBlock 定义如下

我无法理解这个问题。还有其他方法吗?还是我的方式正确但我的代码不正确?

我认为问题在于 video_modes 部分VbeInfoBlock被定义为一个段:偏移量对。我不知道如何在 32 位 C 代码中使用它。

(您可以请求我的第二阶段引导加载程序或我原来的引导加载程序,但对于这个问题,我认为没有必要)

编辑:

我在 Brendan 回答后尝试的代码

还有我的gdt

编辑2:

图片

myy 输出截图

编辑3:

我使用的代码:

和没有 itoa 的我的输出截图

编辑4:

gcc -v

C:\Users\Asus>gcc -v 使用内置规范。COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=D:/MinGW/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/lto-wrapper.exe 目标:i686-w64-mingw32 配置:../。 ./../src/gcc-8.1.0/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with -sysroot=/c/mingw810/i686-810-win32-dwarf-rt_v6-rev0/mingw32 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,https://sourceforge.net/projects/mingw-w64CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/i686-810-win32-dwarf-rt_v6-rev0/mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/包括 -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/i686-810-win32-dwarf-rt_v6-rev0/ mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/ i686-810-win32-dwarf-rt_v6-rev0/mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/包括'LDFLAGS='-pipe -fno-ident -L/c/mingw810/i686-810-win32-dwarf-rt_v6-rev0/mingw32/opt/lib -L/c/mingw810/prerequisites/i686-zlib-static/ lib -L/c/mingw810/先决条件/i686-w64-mingw32-static/lib -Wl,--large-address-aware' 线程模型:win32 gcc version 8.1.0 (i686-win32-dwarf-rev0, Built by MinGW-W64 project)

编辑5:

不带 * 的输出屏幕截图

0 投票
1 回答
418 浏览

assembly - 如何正确获取 VBE 数据?int 10h/ax=4F

我得到了用网络上的一些信息和代码构建的代码,但我尝试了至少一百次,重写了mode_infoandvbe_info结构,我无法获得正确的值,我看到了 vbe3.pdf,但它使用anddd ?就这样db ?不工作,在某些站点我发现和数据结构NASM的字节大小不同,所以我写了我猜的,系统甚至不打印味精“设置 vieo 模式”,停止在,我猜系统当我尝试使用数据调用函数时出现错误(可能/可能结构不正确),但代码有什么问题?vbe_infomode_infoget_mode_infomode_info

(代码不适合引导加载程序,所以我不得不加载第二个扇区)

生成文件:

引导加载程序:

系统: