如何在内核 C 的 Console/Video(protected) 模式下伪造我的 OS fit screen?

How to forge my OS fit screen in Console/Video(protected) mode in kernel C?

首先,对不起我的英语。
我正在创建自己的操作系统,但我遇到了一些屏幕尺寸问题。 如何让我的 OS 适合屏幕并获得屏幕尺寸?
谢谢大家

OS 是一个巨大的东西,有很多部分(引导加载程序、内核、驱动程序、GUI、应用程序,...)。所有的部分都依赖于导致“层”的较低级别的事物,其中一层的部分(例如应用程序)依赖于较低层的部分(GUI,VFS,网络堆栈),而较低层的部分又依赖于较低层的部分(驱动程序)。 ..

对于任何能够适合屏幕尺寸的作品,有 2 个选项:

  • 提供分辨率独立性。这最常用于更高级别的图形(例如画线、矩形、字符等);其中较低层(例如视频卡驱动程序)将虚拟坐标系转换为物理坐标系(视频模式的分辨率)。在这种情况下,更高级别的部分没有理由关心“以像素为单位的屏幕尺寸”是什么; “虚拟坐标中的屏幕尺寸”可以是常数(例如“从 -1.0 到 +1.0”);和“以毫米为单位的物理屏幕尺寸”(如果需要)必须来自较低层。

  • 无法提供解析独立性。这最常用于顽固的旧坏东西(应该避免),因为它会导致重大问题——要么图形变得糟糕(例如,你无法阅读的小字体或占据大部分屏幕的巨大图标),因为它们之间存在很大差异程序员假定的屏幕尺寸与实际使用的屏幕尺寸之间;或者程序员必须自己做更多的工作来改变所有图形的大小(而且大多数人不会打扰)。在这种情况下; “以像素为单位的屏幕尺寸”和“以毫米为单位的物理屏幕尺寸”(如果需要)都必须来自较低层。

请注意,对于早期启动(在启动驱动程序之前等),“较低层”可能表示“固件”。例如;内核可能会从引导加载程序获取“屏幕大小”,而引导加载程序可能会从它用于 select 并设置视频模式的任何固件功能中获取“屏幕大小”。

终于;在所有情况下,“字符屏幕大小”都是一堆额外的问题(在“pixels/virtual coords/millimeters 中的屏幕大小”之上)。因为现代字体渲染引擎使用比例字体(不同的字符具有不同的宽度)并支持不同的字体大小,所以没有正确的“字符屏幕大小”值。相反,您最终需要查询字体引擎(例如“对于此特定字体大小的特定字体;此特定字符串中有多少字符将适合此起始位置和屏幕边缘”),以及这种事情通常最终被委托给“布局引擎”(它从更高的 level/more 抽象表示中确定诸如自动换行和小部件放置之类的事情)。当然这是极其复杂的。然而;有一种特定情况(mono-spaced 一种固定大小的字体),其中“屏幕字符大小”可以通过简单的整数除法确定(“屏幕字符大小 = 屏幕像素大小/字符大小像素”)。

屏幕尺寸写在您的屏幕规格中。阅读规范,将其写入您的 OS 即可。