2013-06-11 28 views
2

我試圖打開圖形模式在VGA(在我們的課程內核 - JOS)。
我發現要做到這一點,我需要從實模式(8086)調用中斷10h。 但是,進入保護模式後進入實模式是個問題,所以我試圖使用V86模式。
我發現爲了使用V86模式,我需要將它作爲一個任務來運行,所以現在我正在爲V86進程添加支持。
我的內核是有限的,沒有包含適當的文件系統,所以爲了加載實模式代碼,我試圖編譯並將它們鏈接在一起(內核和v86任務)。創建實模式精靈文件並將其鏈接到我的內核

那麼有誰知道如何創建一個真正的模式精靈?
此外,如果任何人都可以給我提示如何將它與內核鏈接在一起,那就太棒了!

謝謝,
Shai。

回答

1

這將是一個快速的答案,但:

我不知道如何/如果你可以直接聯繫在一起的實模式和保護模式的代碼。然而,有兩兩件事你可以嘗試:

  1. 你可以下來編譯實模式代碼到一個平坦二進制(剔除所有元數據),並與你的內核打包的(也許它附加到內核映像的結尾或其他方式)。然後你需要在運行時找到它,將它加載到內存中,然後jmp /調用它。由於我不知道你的內核是如何打包或運行的,所以這可能相當困難。
  2. 直接將機器代碼添加到您與內核鏈接的程序集文件中。我沒有一個真實的例子,但它可能是這個樣子:

    EnterRealMode: 
        db 0b8h, 00h, 00h   ; mov ax, 00h 
        db 0fe, 0ebh     ; jmp $ 
        etc. 
    

此外,你可能想實際咚下降到實模式,而不是使用虛擬8086模式。如果不這樣做,BIOS調用的內存映射和中斷可能會全部失敗。 Advice on thunking down to real mode.