如何在c或asm中切换到Super VGA?

如何解决如何在c或asm中切换到Super VGA?

我正在创建一个图形操作系统,当前使用的是在保护模式之前启动的模式19,但是我想提前获得更高的分辨率。 我在asm中的图形激活

graphicmode:
  mov ax,19; here select which mode you want
  int 16

谢谢您的帮助:) 我的程序运行了,但是我画了0xA0000,我认为缓冲区不足,因为我只看到了屏幕的一部分。你能帮助我吗? 如何使用银行转帐? image

解决方法

如何在c或asm中切换到Super VGA?

对于具有BIOS的旧80x86 PC;几乎所有视频卡都支持VBE(请参见https://en.wikipedia.org/wiki/VESA_BIOS_Extensions)。在这种情况下,您的代码将要求它提供视频模式编号的列表,然后使用这些编号来获取有关每种视频模式的信息,并过滤出软件不支持的视频模式,然后选择“最佳”视频模式支持,并设置该视频模式。这是必要的,因为不同的计算机支持不同的视频模式(您不能仅仅期望存在800 * 600之类的特定视频模式,因为当该视频模式不存在时,您的代码将被破坏并且无法使用)。有3种不同的使用VBE功能的方式-使用实模式,使用随VBE2.0引入的32位保护模式接口(已在VBE3.0中过时/可选)以及使用16位保护模式接口来使用VBE功能。在VBE3.0中引入;但是某些情况下不支持某些功能(例如,VBE2.0 32位保护模式接口主要仅支持在设置视频模式后使用的功能)。

这意味着(对于引导)(对于BIOS),在BIOS之后,支持所有视频卡(具有/不具有VBE,具有/不具有32位保护模式接口以及具有/不具有16位保护模式接口)靴子是一个很大的痛苦;尤其是在OS是64位并且不能使用virtual8086模式的情况下(并且必须实现模拟器/解释器以执行实模式代码,而不会破坏OS的所有其他设备驱动程序)。

对于具有UEFI的现代80x86 PC(请参阅https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface),有些UEFI功能的作用类似于VBE(获取视频模式列表,获取视频模式的详细信息,设置视频模式)。最大的区别在于该API支持多个监视器和多个视频卡(VBE不支持);并且在启动后(调用ExitBootServices()之后)不能使用任何这些功能。

另一种选择是编写本机视频卡驱动程序,而不使用固件/视频卡ROM上的固件。这非常复杂且非常耗时(因为每个视频卡需要不同的代码);并且您将始终需要一个后备来处理“糟糕,视频卡太新了,我还没有为其编写本地视频驱动程序”,因此它不能避免支持固件的使用(UEFI或BIOS / VBE)以查找/设置视频模式。

要使OS在所有情况下均可工作(带有BIOS的旧计算机,带有UEFI的新计算机,具有/不具有本机视频驱动程序),唯一明智的方法是:

  • 引导加载程序使用VBE(如果引导加载程序是为BIOS设计的)或UEFI(GOP或UGA,如果引导加载程序是为UEFI设计的)为其可以使用的所有监视器/视频卡设置默认视频模式。 ;然后告知每个监视器内核/ OS的详细信息(帧缓冲区的地址,像素格式,每行像素的字节数,水平和垂直分辨率),然后OS使用这些详细信息绘制图形;这样操作系统就不必担心引导加载程序是在使用BIOS还是UEFI。

  • 稍后在引导过程中;操作系统尝试为每个视频卡启动本机视频驱动程序。如果找到一个,则OS可以使用它来更改视频模式,并可以尝试在引导过程中找到更好的视频模式(该选项未作为引导加载程序的选项)。

  • 如果没有合适的视频驱动程序,则操作系统在引导后无法更改视频模式;因为只有在固件为BIOS并且(对于BIOS)固件非常麻烦时才支持此功能。请注意,操作系统仍可以在磁盘上的某个位置(例如,在引导配置文件中)设置一些“视频模式首选项”信息,引导加载程序将寻找这些信息,然后重新启动以使引导加载程序选择其他模式。

请注意,现代显示器具有首选/本机分辨率(如果分辨率不同,则执行“通常为低质量”缩放),因此对于每台显示器,只有一种真正的视频模式可供任何人使用;如果操作系统不是很糟糕,它将提供“分辨率独立性”(请参阅​​https://en.wikipedia.org/wiki/Resolution_independence)。在仅有两种情况下,用户实际上希望在启动后更改视频模式-他们已经更换了显示器,并且出于性能方面的考虑而这样做。幸运的是,人们不会经常更换显示器(因此在这种情况下重新启动只是不便之处);除非用户尝试玩3D游戏(其中“每秒帧”更重要且处理量明显更高),否则性能不会成为问题,除非用户仍然会对此感到烦恼(除非有本地视频)支持硬件加速3D的驱动程序)。换句话说,如果您没有本机视频驱动程序,并且在启动后无法更改视频模式;几乎没人会在意。

如果您确实希望引导加载程序设置视频模式,请执行以下操作:那么它将取决于哪个引导加载程序。大多数通用引导加载程序(例如GRUB)都会为您设置视频模式,并告知您所设置的视频模式的信息,因此您完全不必这样做。

如果您正在编写自己的引导加载程序;然后可以轻松地在线获得有关VBE和UEFI的相关规范(例如,参见上面链接到的相应Wikipedia页面的“外部链接”部分);因此,您可以阅读规范,然后尝试编写代码(如果遇到问题,请询问更具体的问题)。

我的程序运行了,但是我画了0xA0000,我认为缓冲区不足,因为我只看到了屏幕的一部分。你能帮助我吗?如何使用银行转帐?

对于旧的VGA“ 320 * 200具有256色”模式,所有内容都适合64 KiB,因此您不需要任何组切换。

请注意,对于更高分辨率的视频模式,您要么需要组切换(性能差,UEFI不支持,而且对BIOS来说太痛苦了),或者您必须使用保护模式或长模式来访问线性帧缓冲区。当然,使用高分辨率视频模式的图形操作系统将在RAM中包含许多MiB图形数据,用于图标,图片和缓冲区等内容。因此实模式(不能访问超过约640 KiB的RAM)还是完全无法使用。例如,出于性能原因;您最终将需要在RAM中进行所有绘制的缓冲区(然后,在完成所有绘制后,您需要将结果像素数据从RAM中的缓冲区复制到视频卡的帧缓冲区);对于视频模式(例如“ 800x600,每个像素32位”),RAM中的缓冲区本身将花费大约1875 KiB的RAM。

,

要使模式表转到http://www.brokenthorn.com/Resources/OSDevVid2.html

,此代码有效
 mov ax,0x4F02; here select which mode you want
  mov bx,0x11B
  int 16

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res