2013-06-28 56 views
2

將視頻內存映射到此地址的視頻內存地址(0xB8000)?
從地址複製數據並放到屏幕上的例程是處理器內置函數(該驅動程序是否隨處理器提供)?
視頻內存地址

回答

3

當你寫的地址,會發生什麼:

地址空間的那個區域沒有被映射到RAM中,而不是它得到跨系統總線發送到您的顯卡。 BIOS在啓動時用你的VGA卡進行設置(很多地址範圍是映射到各種設備的內存)。當您寫入地址空間的這個區域時,沒有代碼正在CPU上執行以繪製像素。 VGA卡接收這些信息而不是你的RAM,並自行完成。

如果您想要,您可以查看BIOS函數調用並重新配置硬件,以便您可以繪製像素,而不是在視頻地址處放置字符。你甚至可以探測它是否支持VESA並切換到1280 * 768的32bpp分辨率。然後BIOS會將您選擇的地址空間區域映射到VGA卡上。

更多關於BIOS:

BIOS是隨你的主板的程序,你的CPU執行時,第一次接通電源。它設置所有硬件,映射所有內存映射設備,創建各種有用的表,分配IO端口,將中斷掛到內存中的一堆例程上。然後它從設備加載您的啓動扇區並跳轉到您的操作系統代碼。

留下的例程和數據結構使您能夠使您的操作系統離開地面。您可以從磁盤加載扇區,將文本寫入屏幕,獲取有關係統的信息(存儲器映射,ACPI表,MP表.etc)。如果沒有這些例程和數據結構,如果不是不可能做出一個可接受的引導扇區並且獲得有關係統的所有信息來構建一個功能內核,那將會困難得多。

然而,這些例程是過時的,速度慢並且具有非常嚴格的限制。對於一個留在內存中的例程是16位實模式代碼,所以一旦你切換到32位保護模式,你必須不斷切換回或使用VM86模式來訪問它們(在64位模式下完全無法訪問,顯然使用修改來模擬指令儘管Linux x86emu庫是一個選項)。所以這些例程通常非常緩慢。因此,如果您遠離實模式編程,您將需要從頭開始編寫自己的驅動程序。

0

在大多數情況下,在PC監視器是VGA-compatible device,其通過standard包括用於通過MMIO設定text buffer(32 KB大小)從0xB8000的地址開始的模式。上述

How MMIO works:

圖片總結MMIO是如何工作的。