问题标签 [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.
assembly - 在 VESA 图形模式下绘制像素
如何在 VESA 图形模式下绘制像素?
我正在尝试中断10h
功能0ch
,但它不起作用。怎么了?
(注:我用 NASM 语法写了这段代码,并用 qemu 测试过)
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 的值......有谁知道如何解决这个问题?
assembly - 在程序集中设置显存VGA/VESA的自定义基地址
我开始在 32 位保护模式下编程。我将它用于高图形分辨率,如 1280x1024 256 色:
但我对视频内存 (VRAM) 的大小有疑问,因为切换到此分辨率后,我需要 1,280 * 1,024 = 1,310,720 字节的 VRAM,但标准 BIOS VRAM 只有 131,072 字节宽(地址范围:0xa0000-0xbffff)。有什么方法可以扩展 BIOS VRAM 或设置我的 VRAM 自定义基地址?(我想绕过编写自己的驱动程序。)
assembly - 切换到 VESA/VBE?
所以,我目前正在开发一个操作系统,我陷入了一个非常愚蠢的境地:切换到 VESA/VBE
我当前的代码:
它改变了 Qemu 的分辨率,但现在我在绘制像素时遇到了问题。像素偏移的公式为:
问题是 bpp、pitch 和 framebuffer 应该由
和
第一的,
软锁qem。即使没有,我该怎么做才能访问信息。
我想要的是一个切换到 VESA/VBE 的函数,它完全用汇编(nasm)编写,然后用我的内核可以访问的 c 编写的函数。
编辑:我真的不能在我的引导加载程序中包含任何 C。我需要汇编代码。
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
operating-system - 什么是 1920x1080x24bpp OS Dev 的标准 VESA 视频模式
我正在开发一个小型操作系统,我刚开始使用 1280x1080 视频模式(模式 11Bh)来获得分辨率。现在我想要更好的东西,因为模式 11Bh 有点受压,而且它的比率很好。所以我开始搜索 1920x1080 视频模式,但在论坛和 OSDev 中找不到。模式 1920x1080x24bpp 的标准模式编号是什么,特殊的完全访问模式 81FFh 与它有什么关系?
nasm - 获取 VBE 信息
最近,我开始在我的操作系统中使用 vbe 进行图形处理。在实模式下,vbe 信息块结构返回指向视频模式列表的指针。当我查看这个指针的十六进制值时,它看起来像这样:它是一个双字值
我想知道如何以实模式获取此地址的数据,因为我无法访问该地址。有谁知道如何做到这一点?
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 个字符。
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:
图片
编辑3:
我使用的代码:
编辑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:
assembly - 如何正确获取 VBE 数据?int 10h/ax=4F
我得到了用网络上的一些信息和代码构建的代码,但我尝试了至少一百次,重写了mode_info
andvbe_info
结构,我无法获得正确的值,我看到了 vbe3.pdf,但它使用anddd ?
就这样db ?
不工作,在某些站点我发现和数据结构NASM
的字节大小不同,所以我写了我猜的,系统甚至不打印味精“设置 vieo 模式”,停止在,我猜系统当我尝试使用数据调用函数时出现错误(可能/可能结构不正确),但代码有什么问题?vbe_info
mode_info
get_mode_info
mode_info
(代码不适合引导加载程序,所以我不得不加载第二个扇区)
生成文件:
引导加载程序:
系统: