从没有BIOS服务的INT 13的软盘中加载OS映像

问题描述 投票:0回答:1

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

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

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

operating-system linux-device-driver bootloader disk bios
1个回答
0
投票

正如0andriy所评论的那样,您必须绕过BIOS直接与软盘控制器通信。 (哪个顺便说一句,您为什么要这样做?BIOS是专门制造的,因此您不必这样做。仅仅是因为您想学习也许对FDC编程的方法吗?这样。)

FDC​​(软盘控制器)是ISA(工业标准体系结构)时代,当时I / O端口被硬编码到特定地址。 FDC有许多变体,但大多数遵循标准规则。最初的756是常见的FDC,后来的82077AA变型(后来仍然很旧,直到今天的标准)仍然是控制器。

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

这并不难,但是现在您必须有某种方式使ISA总线与FDC和主内存进行通信。附带DMA(直接内存访问)。现在,您还必须对DMA进行编程以进行传输。

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

我并不是说这是不可能的,我只是说这是不可能的。一方面,如果您可以(可靠地)以512字节进行操作,那么我希望看到它。这可能是一个有趣的实验。无论如何,搜索FDC,DMA等,这些都是我在这里写的。网上有很多例子。如果您想读一本关于它的书,我wrote such a book会回头介绍所有多汁的细节。

© www.soinside.com 2019 - 2024. All rights reserved.