2

我开始在 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 自定义基地址?(我想绕过编写自己的驱动程序。)

4

1 回答 1

3

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

显存分为 64k 页。在图形模式下,这些将位于 0xA0000-0xAFFFF 的范围内;您实际上并没有一次获得 128k 连续。要更改当前映射的页面,请使用 AX = 4F05h、BX = 0 和 DX = 页号调用 INT 10h。第 0 页从屏幕左上角开始(默认情况下),第 1 页是第一个 64k 之后的内存,依此类推。

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

于 2020-09-18T07:11:21.227 回答