PC-boot: dl-register en drive-nummer

Ik heb ergens op internet gelezen dat, voordat naar 0x7c00 is gesprongen, het BIOS in% dl het "schijfnummer" van het opgestarte apparaat laadt. Maar wat is dit "aandrijfnummer"? Elk apparaat dat is aangesloten op de computer krijgt een nummer toegewezen van het BIOS? Zo ja, hoe weet ik dan aan welk nummer een bepaald apparaat is toegewezen?

Als ik de GRUB-broncode lees die ik heb gevonden wanneer% dl de bits 0x80 en 0x70 heeft ingesteld, overschrijft het het hele register met 0x80. Waarom is dat? Hier is de code:

jmp 3f      /* grub-setup may overwrite this jump */
testb $0x80, %dl
jz 2f
3:
/* Ignore %dl different from 0-0x0f and 0x80-0x8f.  */
testb $0x70, %dl
jz 1f
2:     
movb $0x80, %dl
1:

Trouwens. Is er een gedetailleerde bron voor het opstartproces van pc's in het web? Speciaal over wat de BIOS doet voordat de besturing aan de bootloader wordt gegeven en ook de standaardcodes die worden gebruikt om ermee te communiceren (zoals dat "schijfnummer"). Ik hoopte dat ik mijn eigen bootloader kon schrijven en alles wat ik vond is een beetje te vaag, niet technisch genoeg om de exacte status van de computer te informeren wanneer mijn bootloader begint te draaien.

6

1 antwoord

BIOS int 13h-functies accepteren een schijfnummer. Het zou dat soort schijfnummer moeten zijn in DL , dat BIOS begrijpt, want het gebruikt zelf int 13h om opstartsectoren te laden.

3
toegevoegd
AFAIK, 0x80 is het enige geldige schijfnummer voor de opstartschijf, vergelijkbaar 0x00 voor het opstartdiskettestation. Er is een opmerking in de code: Dit is een oplossing voor buggy-BIOS's die de opstartschijf niet correct doorgeven. Als GRUB op een HDD is geïnstalleerd, controleer dan of DL correct is gemaskeerd. Als dat niet het geval is, neem dan aan dat het BIOS een valse waarde heeft doorgegeven en stel DL in op 0x80, aangezien dit de enige mogelijke opstartschijf is. Als GRUB in een floppy wordt geïnstalleerd, doet dit niets (alleen springen). Zo is het van oudsher geweest. Niet-opstartschijfnummers zijn hoger.
toegevoegd de auteur Alexey Frunze, de bron
Als je van daar start, zou het 0x80 moeten zijn.
toegevoegd de auteur Alexey Frunze, de bron
OK. Ik weet dat het bios het begrijpt, maar ik wil het ook begrijpen. :) Wat ik wil weten, is hoe deze codes worden toegewezen. Graag, als ze statisch zijn (0 voor een bepaald apparaat, 1 voor een ander ... enz.) En zo ja, waar kan ik deze lijst krijgen; en als ze dat niet zijn, hoe worden ze door de bios toegewezen.
toegevoegd de auteur Kei, de bron
Ik snap het. Zal het hetzelfde aantal (0x80) zijn voor flash- en cd-rom-stations?
toegevoegd de auteur Kei, de bron