Comment fonctionnent les extensions du BIOS (ROM optionnelles)?

4

Comment fonctionnent les extensions du BIOS (ROM optionnelles)? Je comprends qu'un périphérique installé peut avoir son propre BIOS qui ajoute des fonctionnalités au système, mais je ne suis pas sûr de la façon dont elles sont configurées.

Je ne cesse de lire les adresses suivantes. La plage d'adresses 0x0C0000 à 0x0F0000 est utilisée mais je ne comprends pas pourquoi. C'est comme si les ROM étaient stockées à ces adresses mais je ne vois pas comment cela fonctionnerait. Que se passe-t-il si vous avez installé 2 périphériques qui devraient être à 0x0C0000?

Ensuite, le BIOS passe à la ROM d’option et commence à fonctionner à partir de là. Ma question suivante est que, lorsque la ROM écrit dans la table des vecteurs d’interruption et connecte une interruption pour pointer sur elle-même, à quelle adresse correspond-elle?

Par exemple, sur une carte VGA, à quelle adresse doit-on accrocher INT 10h?

Ou est-ce que la ROM optionnelle entière est mappée dans une zone comprise entre 0x0C0000 et 0x0F0000 et que l'IVT pointe quelque part dans cette plage?

Je sais que cela concerne les technologies plus anciennes qui ne sont plus utilisées (par exemple, l’utilisation d’interruptions), mais je voudrais savoir comment elles fonctionnent.

Si quelqu'un peut aider à répondre aux questions ci-dessus ou simplement donner un bref aperçu, il serait grandement apprécié.

Merci

RJSmith92
la source
Où lisez-vous ceci? La seule façon d'ajouter des fonctionnalités à un BIOS consiste à appliquer un micrologiciel différent.
Ramhound
@Ramhound vient de google Option ROM ou extensions de BIOS
RJSmith92
J'ai fait. Je veux savoir ce que vous lisez exactement.
Ramhound

Réponses:

6

À l'époque IBM PC, avec le bus ISA, chaque périphérique devait simplement utiliser une adresse différente. Souvent, ils avaient des cavaliers matériels ou des commutateurs DIP que vous pouviez configurer pour changer l'adresse afin d'éviter les conflits. Avec l'avènement du bus PCI, les adresses matérielles sont configurées automatiquement par le système BIOS pour attribuer une adresse unique à chaque périphérique.

Si l'oprom raccroche une interruption, il pointe vers une adresse dans l'adresse assignée à laquelle il appartient. Dans le cas du bios VGA, cela se trouvait normalement dans le bloc 0xC0000. À l'aide du débogueur msdos, vous pouvez inspecter la table des vecteurs d'interruption pour voir le point d'entrée et commencer à désassembler les instructions pour voir ce qu'elles ont fait.

psusi
la source
Merci. Ainsi, avec les cartes ISA, vous définissez manuellement une adresse comprise entre 0x0C0000 et 0x0F0000 afin d'éviter tout conflit. Avec les cartes PCI PnP, le BIOS attribuerait automatiquement au BIOS du périphérique une plage d'adresses comprise entre 0x0C0000 et 0x0F0000. Ainsi, un périphérique aurait 2 ou plusieurs plages d'adresses, il mapperait son BIOS ROM dans une plage comprise entre 0x0C0000 et 0x0F0000 pour les interruptions et aurait également des adresses attribuées pour MMIO accessibles via un pilote?
RJSmith92
1
@ RJSmith92, oui, en général, les périphériques ne demandent que des adresses de l'ancienne plage 0xC0000 à 0xF0000 pour les opérations de BIOS, et utilisent des adresses comprises entre 3 et 4 Go pour MMIO.
psusi
1
@ RJSmith92, à peu près, oui. VGA bios hook int 10h, qui fournit une API pour la sortie de texte de base, et les contrôleurs de disque hook int 13h, qui fournit des interfaces de lecture / écriture de disque de base. Vous pouvez rechercher sur Google la liste des interruptions de Ralph Brown pour les détails les plus importants.
Psusi
1
@ RJSmith92, oui, si vous utilisez le pilote vga de base, il doit rester activé, mais il sert uniquement à définir la résolution et non à afficher à l'écran.
psusi
1
@ RJSmith92, comme je l'ai dit, il n'est utilisé que pour changer de mode, il peut donc être désactivé le reste du temps. Il peut également être copié sur le bélier et exécuté à partir de là. À bien y penser, la plupart des bioses de la journée avaient le choix d’observer les bios et les bios vidéo de RAM. Après l'avoir copié sur RAM, il serait désactivé.
Psusi