2013-06-11 32 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.