Как работают расширения BIOS (дополнительные ПЗУ)?

4189
RJSmith92

Как работают расширения BIOS (дополнительные ПЗУ)? Я понимаю, что установленное устройство может иметь свой собственный BIOS, который добавляет функции в систему, но я не уверен, как они настроены.

Я продолжаю читать следующий диапазон адресов от 0x0C0000 до 0x0F0000, но я не понимаю, для чего он используется. Как будто диски хранятся по этим адресам, но я не вижу, как это работает. Что делать, если вы установили 2 устройства с ожидаемым значением 0x0C0000?

Затем BIOS переходит к дополнительному ПЗУ и начинает работать оттуда, мой следующий вопрос: когда ПЗУ записывает в таблицу векторов прерываний и перехватывает прерывание, чтобы указать на себя, на какой адрес это указывает?

Например, на VGA-карте к какому адресу будет подключаться INT 10h?

Или все дополнительное ПЗУ отображается в области от 0x0C0000 до 0x0F0000, и IVT будет указывать где-то в этом диапазоне?

Я знаю, что это касается старых технологий, которые больше не используются (например, с использованием прерываний), но мне интересно, как они работают.

Если кто-то может помочь ответить на вышеуказанные вопросы или просто дать краткий обзор, он будет очень признателен,

Спасибо

4
Where are you reading this? The only way to add features to a BIOS is to apply a different firmware. Ramhound 10 лет назад 0
@Ramhound просто Google Option ROM или расширения BIOS RJSmith92 10 лет назад 0
I did. I want to know what you read exactly. Ramhound 10 лет назад 0

1 ответ на вопрос

6
psusi

In the IBM PC days, with the ISA bus, each device simply had to use a different address. Often times they had hardware jumpers or dip switches you could configure to change the address to avoid conflicts. With the advent of the PCI bus, hardware addresses are configured automatically by the system bios to assign each device a unique address.

If the oprom hooks an interrupt, it points to an address within the assigned address that the oprom lives at. In the case of VGA bios, that normally was within the 0xC0000 block. Using the msdos debugger, you could inspect the interrupt vector table to see the entry point, and start disassembling the instructions there to see what they did.

Благодарю. Таким образом, с картами ISA вы должны вручную установить адрес от 0x0C0000 до 0x0F0000, чтобы они не конфликтовали. С картами PCI, которые являются PnP, BIOS автоматически назначит диапазон адресов для BIOS устройства от 0x0C0000 до 0x0F0000? Таким образом, устройство будет иметь 2 или более диапазонов адресов, оно будет отображать BIOS своего ПЗУ в диапазоне от 0x0C0000 до 0x0F0000 для прерываний, а также будет иметь назначенные ему адреса для MMIO, к которым можно получить доступ через драйвер? RJSmith92 10 лет назад 0
Так, например, современный графический процессор, будет ли он по-прежнему отображать видео BIOS между 0x0C0000 и 0x0F0000, а затем ему будут назначены адреса, такие как 0xE0000000 - 0xEFFFFFFF, которые драйвер будет использовать для доступа к карте? RJSmith92 10 лет назад 0
@ RJSmith92, да, обычно устройства запрашивают адреса только в старом диапазоне от 0xC0000 до 0xF0000 для биос опромов и используют адреса в диапазоне 3-4 ГБ для MMIO. psusi 10 лет назад 1
Спасибо, последний вопрос, так что дополнительные ПЗУ предоставляют API для доступа к оборудованию через прерывания? и альтернативой этому является прямой доступ к оборудованию через драйвер устройства? RJSmith92 10 лет назад 0
@RJSmith92, pretty much, yea. VGA bios hooks int 10h, which provides an api for basic text output, and disk controllers hook int 13h, which provides basic disk read/write interfaces. You might google for Ralph Brown's interrupt list for the nitty gritty details. psusi 10 лет назад 1
Извините, последний вопрос. Есть ли причина, по которой эти сопоставленные ПЗУ не отображаются в Windows? например ресурсы, назначенные моему графическому процессору в диспетчере устройств, показывают VGA-адрес 0xA0000 - 0xbffff, но не показывают диапазон C0000h-C7FFFh, назначенный карте для Video BIOS? RJSmith92 10 лет назад 0
@ RJSmith92, поскольку Windows не работает в 16-битном режиме, ей не нужен опос bios, поэтому она не назначается. psusi 10 лет назад 0
Что вы подразумеваете под отменой назначения? Когда Windows переключается в 32/64 битный режим, опром все еще отображается на C0000h на C7FFFh, но Windows просто не сообщает об этом? 0xA0000 - 0xbffff по-прежнему отображается, так почему бы не дополнительные ПЗУ. RJSmith92 10 лет назад 0
@ RJSmith92, Windows отключает отображение, потому что оно не нужно. psusi 10 лет назад 0
Спасибо, только что запустил инструмент под названием PCIScope, который дает подробную информацию обо всех устройствах на шине PCI. Это показало, что ПЗУ для моего графического процессора было размером 128 КБ и было отключено. Я предполагаю, что Windows просто отключает его, когда он перечисляется. Хотя я думал, что Windows использует int 10h для VBE, чтобы показать заставку, или он работает с драйвером vgasave? Разве ROM не должен быть включен в этот момент? RJSmith92 10 лет назад 0
@ RJSmith92, да, если вы используете базовый драйвер VGA, он должен оставаться включенным, но он используется только для установки разрешения, а не для рисования на экране. psusi 10 лет назад 1
Хм, я отключил свой графический процессор и использовал драйвер VGA, но ПЗУ все еще отключен. Не совсем уверен, как современная ОС будет работать с видео BIOS в защищенном режиме. RJSmith92 10 лет назад 0
@ RJSmith92, как я уже сказал, он используется только для переключения режимов, поэтому в остальное время его можно отключить. Он также может быть скопирован в оперативную память и запущен оттуда. Если подумать, у большинства биосов в тот день были возможности скрывать биос и видеобиос в оперативной памяти. После копирования в оперативную память он будет отключен. psusi 10 лет назад 1

Похожие вопросы