Assembly 如何在汇编中获得高级视频模式?

Assembly 如何在汇编中获得高级视频模式?,assembly,video,Assembly,Video,我知道获取视频模式的int 10h风格。但我发现更高质量的视频模式需要16位寄存器(fxp.110h=标准VGA 24位颜色)。有没有一个功能,或者我需要一个中断。顺便说一句,我正在制作我的示例操作系统。(这是图形界面)首先,视频BIOS(int10h,AH=0)通过使用“in”和“out”汇编指令将值写入视频控制器,对视频硬件进行内部编程 通过直接编程视频控制器(通过使用“输入”和“输出”写入值),您可以创建完全没有数字的“自定义”视频模式 BIOS定义的所有视频模式都有编号0-0FFh,因此

我知道获取视频模式的int 10h风格。但我发现更高质量的视频模式需要16位寄存器(fxp.110h=标准VGA 24位颜色)。有没有一个功能,或者我需要一个中断。顺便说一句,我正在制作我的示例操作系统。(这是图形界面)

首先,视频BIOS(int10h,AH=0)通过使用“in”和“out”汇编指令将值写入视频控制器,对视频硬件进行内部编程

通过直接编程视频控制器(通过使用“输入”和“输出”写入值),您可以创建完全没有数字的“自定义”视频模式

BIOS定义的所有视频模式都有编号0-0FFh,因此不存在编号110h

但是,支持特殊模式(例如640x480x24位)的图形卡BIOS对此模式不使用相同的视频模式代码(因此,一个视频卡上的AL=50小时,另一个视频卡上的AL=60小时)

因此,定义了使用不同方法设置视频模式的“VESA扩展”。对于标准化模式,它们在100h-1FFh范围内使用不同的数字;对于供应商定义的模式,它们在200h-3FFh范围内使用不同的数字。并非所有的生物圈都支持这些扩展。我认为大多数现代的“真实”生物系统都会支持这些功能,但也许像DOSbox这样的模拟器不支持这些功能。在这种情况下,您没有机会获得此视频模式

顺便说一下:110h是640x480x15bit;24位是112小时

用于访问这些模式的功能为INT 10h,AX=4F00h-4F0Ch。对于大多数BIOS和MS-DOS中断,您可以在“Ralph Brown的中断列表”中找到一个很好的描述:关于INT 10h的页面链接是:

视频模式按以下方式设置(请参阅上面有关如何使用每个功能的链接):

  • 使用AX=4F00h检查VESA扩展是否存在,并获取功能
  • 使用AX=4F01h获取有关视频模式的信息(例如内存段、页面粒度和页面大小)
  • 使用AX=4F02h实际设置视频模式
  • 访问视频存储器时,使用AX=4F05h更改视频页面

视频页面(具有页面大小和页面粒度)是必需的,因为从0A000h:0000h到0A000h:0FFFFh的内存区域仅代表64KiB,但此类模式所需的内存远远超过64KiB。使用函数AX=4F05h,您可以定义要访问的更大视频内存中的哪个64KiB。

它进入寄存器AX。你看到这个了吗@罗伯塔维:谢谢有关VBE Bios的DMost信息可在vesa.org(需要注册/登录)的公共文档“vbe3.pdf”中找到。我们可以将所有VBE bios分为两个不同的类别,一侧为VBE bios版本1.xx,另一侧为VBE bios版本2和版本3。对于版本1,我们可以使用VBE modenumber的标准表。从VBE 2开始,我们必须使用VBE bios中的modetable。建模师的远指针可以在函数4F00h的缓冲区+0Eh中找到。我更喜欢使用线性frambuffer(LFB)。LFB地址=模式信息缓冲区+28h功能4F01h。