在装配中设置视频存储器VGA / VESA的自定义基址

时间:2018-06-29 11:40:40

标签: assembly x86 protected-mode vesa vram

我开始以32位保护模式进行编程。我将其用于高分辨率图形,例如1280x1024 256色:

mov ax,0x4F02
mov bx,0x107
int 0x10

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

1 个答案:

答案 0 :(得分:2)

对于保护模式,线性帧缓冲区是最简单的方法。但是,如果要以实模式样式进行映射:

视频存储器分为64k页。在图形模式下,它们的范围为0xA0000-0xAFFFF;您实际上一次不会获得128k的连续性。要更改当前映射的页面,请使用AX = 4F05h,BX = 0和DX =页码调用INT 10h。页面0从屏幕的左上角开始(默认情况下),页面1是第一个64k之后的内存,依此类推。

例如,使用您指定的模式:在第0页上,0xA0000将位于左上角。如果写入0xAFFFF,则会在屏幕中间的某处设置像素。呼叫INT 10h,AX = 4F05h / BX = 0000h / DX = 0001h,然后再次写入0xA0000。您将立即在以前显示为0xAFFFF的右侧更改像素。