在没有 BIOS 服务的 INT 13 的情况下从软盘加载操作系统映像



如何在启动PC时在没有BIOS服务的情况下将操作系统映像从软盘加载到内存中?

我使用的唯一方法是在实模式下调用 int13h .

我知道我需要处理"磁盘控制器"。 我是否需要在 [BIT 16] 真实模式下编写"设备驱动程序",可以吗?

正如0andriy所评论的那样,您必须绕过BIOS直接与软盘控制器通信。 (顺便说一句,你为什么要做这样的事情? BIOS 是专门制作的,因此您不必这样做。 仅仅是因为你想,也许学习如何对FDC进行编程吗?我没意见。

FDC(软盘控制器(属于ISA(行业标准架构(时代,当时I/O端口被硬编码到特定地址。 FDC有许多变体,但大多数都遵循标准规则。 最初的756是一个常见的FDC,后来的(对于今天的标准来说仍然很老(控制器遵循82077AA变体。

这些控制器有十二 (12( 个寄存器,使用八 (8( 个 I/O 字节地址,基数 + 00h 至基数 + 07 小时。 (请注意,如果一个是读取,一个是写入,则单个 I/O 地址可以是两个寄存器。 您读取和写入这些寄存器以指示 FDC 执行操作,例如启动驱动器 1 的电机。 (为了好玩:你知道FDC最初能够处理四个驱动器吗?

这并不难做到,但现在你必须有某种方式让ISA总线与FDC和主存储器通信。 随之而来的是DMA(直接内存访问(。 现在,您还必须对DMA进行编程以进行传输。

这是问题所在。 如果您在软盘的前 512 个字节(BIOS 已经为您加载的 512 字节(中没有所有 FDC 和 DMA 代码,则无法加载其余扇区。 例如,不能将 DMA 代码放在启动代码的第二个扇区中,以便调用它,因为首先必须使用该 DMA 加载该扇区。 所有 FDC 和 DMA 代码(至少至少一个最低读取服务(必须位于磁盘的第一个扇区中。 这很难做到,可靠地。

我不是说这是不可能的,我只是说这是不可能的。 首先,如果你能在 512 字节内(可靠地(做到这一点,我希望看到它。 这可能是一个有趣的实验。 无论如何,搜索FDC,DMA等,我在这里写的东西。 网络上有很多例子。 如果你想读一本关于它的书,我前段时间写了这样一本书,里面有所有有趣的细节。

最新更新