在没有 BIOS 服务的 INT 13 的情况下从软盘加载 OS 图像

Loading OS image from floppy disk without INT 13 of BIOS Service

如何在启动 PC 时在没有 BIOS 服务的情况下将 OS 图像从软盘加载到内存?

我用过的唯一方法是在实模式下调用 int13h。

我知道我需要处理“磁盘控制器”。 我需要在 [BIT 16] 实模式下编写某种“设备驱动程序”吗?

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

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

这些控制器有十二 (12) 个寄存器,使用八 (8) 个 I/O 字节地址,Base + 00h 到 Base + 07h。 (请注意,一个I/O地址可以是两个寄存器,如果一个是读一个是写。)你读写这些寄存器来指示FDC做一些事情,比如启动电机驱动1.(开玩笑:你知道FDC原来是四驱的吗?)

这并不难做到,但现在您必须通过某种方式让 ISA 总线与 FDC 和主内存进行通信。 DMA(直接内存访问)进来了。现在您还必须对 DMA 进行编程以进行传输。

这里有问题。如果您在软盘的前 512 字节中没有所有的 FDC 和 DMA 代码,BIOS 已经为您加载了 512 字节,则无法加载剩余的扇区。例如,您不能将 DMA 代码放在期望调用它的引导代码的第二个扇区中,因为您首先必须使用该 DMA 加载该扇区。所有的FDC和DMA代码,至少有一个最小读服务,必须在磁盘的第一个扇区。这很难做到,可靠。

我不是说不可能,我只是说不可能。一方面,如果您能(可靠地)在 512 字节内做到这一点,我希望看到它。这可能是一个有趣的实验。无论如何,搜索 FDC、DMA 等,我在这里写的东西。网上有很多例子。如果你想读一本关于它的书,我 wrote such a book 前阵子提供了所有有趣的细节。