Базовая система ввода-вывода.
Базовая система ввода-вывода компьютера, наполовину относится к программному, а наполовину к техническому обеспечению. С её помощью реализуются отсутствующие связи этих двух компонент, позволяющие компьютеру принимать работоспсобное состояние. Как и всё программное обеспечение BIOS - набор команд микропроцессора. Подобно техническому обеспечению инструкции BIOS не мимолётны. Из за своей двойственной природы и промежуточного положения между программным и техническим обеспечением эту систему часто относят к микропрограммному обеспечению.
BIOS совместимых с IBM компьютеров является очень специфическим микропрограммным обеспечением, включающем в себя подпрограммы, тестирующие компьютер; дающие возможность, используя только языки программирования без всякого дополнительного программного обеспечения работать с компьютером.
Для обеспечения совместимости компьютера с IBM необходимо обеспечить его совместимость с BIOS IBM. Это не совсем простая задача. BIOS защищена от копирования другими производителями. В результате, вместо использования кодов BIOS IBM, производителю приходится разрабатывать свою собственную систему ввода-вывода. Многие фирмы разрабатывают программы BIOS самостоятельно.
Некоторые подпрограммы BIOS работают отдельно, хотя вся система может быть зашита внутри одного чипа. Они работают как множество отдельных резидентных программ, которые не выгружаются после выполнения. Они всегда в памяти и всегда ждут обращения.
Одной из самых важных характеристик BIOS, определяющей совместимость программного и технического обеспечения, является конкретный набор резидентных подпрограмм, реализующий связь этих двух компонент.
Разработка любого компьютера требует, чтобы множествоэлементов технического обеспечения были обеспечены специальными адресами в пределах диапазона портов ввода-вывода. Другие компоненты компьютера имеют множество своих собственных регистров, которые используются для реализации их функций. Так как компьютер состоит из большого числа внутренних компонент, число реализации компьютеров из этого набора безгранично. В то же время, программное обеспечение, реализующее управление данными устройствами, должно точно знать адреса его регистров. Если бы все компьютеры имели только одну конфигурацию проблем бы не было.
Однако в первых же PC, IBM предусмотрела возможность изменять конфигурацию технического обеспечения в будущем. Это означало, что любой из портов или регистров компьютера может иметь другие адреса в последующих модификациях. Тогда IBM не рассчитывала, что программам может понадобиться прямая адресация. Вместо этого предполагалось, что программы будут обращаться к BIOS, которая будет содержать постоянную адресную часть кодов. Позже компьютеры с изменённой конфигурацией технического обеспечения могли использовать программное обеспечение своих старших собратьев благодаря настройке BIOS. Для этого адресация внутри программ BIOS могла изменяться, чтобы удовлетворить новым разработкам технического обеспечения.
Проблема BIOS в том, что ограниченным числом программ невозможно оптимальным образом накрыть все потребности программного обеспечения. Таким образом использование подпрограмм BIOS является иногда благом, а иногда обузой. В частности, эти подпрограммы реализуют некоторые функции компьютера очень медленно. Проблема производительности особенно остро стоит при работе с видеодисплеем. Например, все подпрограммы IBM BIOS реализуют пересылку информации на дисплей по одному символу. Прямое управление техническим обеспечением позволяет реализовать эту функцию намного быстрее.
Другое неприятное ограничение при работе с BIOS - это то, что компьютер не может ничего делать вне этой системы. Например, драйверы гибкого диска при работе в своих стандартных режима прекрасно уживаются с подпрограммами BIOS, позволяющими читать, писать и форматировать диски, используя стандартные дисковые форматы IBM. В то же время они накладывают ограничение на то что эти устройства могут делать. Однако драйверы гибких дисков сами по себе способны на большее: они могут работать в форматах других компьютерных систем, а так же использоваться для защиты от копирования.
Для увеличения быстродействия работы видеосистемы или драйверов гибких дисков необходимо отказаться от использования BIOS и использовать программы, которые напрямую обращаются к устройствам. Такая концепция претит идеям IBM и может привести к несовместимости. Однако написано так много программ, которые позволяют себе напрямую обращаться к устройствам технического обеспечения, что некоторые выявляющиеся характеристики компьютера являются более стандартизованными, чем сама BIOS. Большинство совместимых компьютеров реализуют свои функции, имитируя техническое обеспечение PC. Но их BIOS разрабатывалась не только исходя их ограаниченийна использование системы IBM. По многим параметрам такое техническое обеспечение более стандартизировано, чем микрообеспечение BIOS. Даже IBM пришлось отказаться от ограничения работы с видеодисплеем только через BIOS для увеличения быстродействия соответствующих операций.
Тем не менее, BIOS обладает большим рядом достоинств. В большинстве случаев эта система облегчает программисту работу. Операционные системы всегда в его распоряжении. Подпрограммы системы хорошо документированы и понятны, что позволяет избавить пользователей от многих забот.
BIOS PC
Дебют BIOS РС состоялся вместе с презентацией первой РС. Начиная с этого времени, эта система имеет самое большое число копий в мире. Все совместимые компьютеры должны скопировать работу BIOS РС без копирования самих кодов этой системы.
Как работает BIOS
BIOS реализует свои функции через систему прерываний програмного обеспечения. Для запуска подпрограммы, содержащей специальную инструкцию микропроцессору по обработке какой-либо конкретной ситуации, выполняемая программа устанавливает соответствующий флажок прерывания.
Прерывания програмного обеспечения приводят к тому, что микропрооцессор приостанавливает выполнение текущей работы и начинает выполнять подпрограмму по обработке прерывания. Для реализации этого механизма микропроцессор, выполнив какую-либо элементарную операцию, исследует векторы прерываний. Если прерывание выставлено, коды выполняемой программы запоминаются, чтобы после обработки прерывания выполнение прерванной программы могло быть продолжено. Каждый вектор прерывания является указателем, говорящим микропроцессору, где находятся коды по обработке данного прерывания. Микропроцессор читает значение вектора и начинает выполнять программы по указанному вектором адресу.
Список векторов прерываний начинается с самого начала памяти микропроцессора по адресу 00000(Hex). Каждый вектор занимает 4 байта памяти, и все они располагаются в памяти по возрастающей. Недостающие значения для каждого вектора загружаются в оперативную память с ПЗУ, содержащих BIOS при загрузке компьютера. Программы могут изменять вектора прерываний для изменения значений прерываний програмного обеспечения. Обычно завершающиеся и остающиеся резидентными программы реализуют подобные корректировки векторов для своих собственных целей.
Так как число имеющихся прерываний может оказаться намного меньше того числа функций, которое вы хотели бы использовать в своих программах, некоторые прерывания BIOS используются для реализации нескольких функций. Эти функции реализуются при помощи передачи параметров. Параметры обрабатываются подпрограммами BIOS. Их значения заносятся в один или более регистров при установке флажка прерываний. В свою очередь, подпрограммы BIOS могут передавать результаты назад в выполняемую программу.
Изменение BIOS РС
Главное отличие первых машин IBM PC с максимальным обьемом памяти в 64К от РС с памятью в 256К кроется в BIOS. При разработке первой системы прерывания, естественно, не учитывалась возможность включения в конфигурацию РС жестких дисков. Поэтому система не содержала возможности по автоматическому наращиванию дополнительных кодов. То есть она была не расширяемой.
BIOS РС-2 и, естественно, появившиеся позже ХТ, как и соответствующие совместимые компьютеры, решили эту проблему добавлением специального кода в подпрограммы BIOS. Эта функция реализовывалась на последнем шаге процедуры загрузки, когда загружались дополнительные коды BIOS.
Рубикон был перейден 27 октября 1982 года.  Более ранние системы BIOS являются не расширяемыми.
Определение даты разработки BIOS
Машины РС-1 легко определить по используемой ими памяти. Любой компьютер IBM, способный комплектоваться только чипами памяти по 16 Кбит, с общим обьемом памяти на своей системной плате в 64К, относится к этому классу машин. Если у вас такая машина, быстрее всего, вы имеете нерасширенную BIOS.
Однако этот метод не всегда хорош. Вы можете не отличить одну микросхему памяти от другой. Либо у вас, попросту, нет никакого желания лезть в корпус вашего компьютера. Кроме того, если выкупили подержанную машину или кто-либо без вашего участия осуществлял установку компьютера, BIOS могла быть скорректирована без вашего уведомления. IBM продает сейчас громадное множество вариантов этой системы для старых компьютеров, что позволяет им работать с расширяемой BIOS.
Самый верный способ установить, какой BIOS пользуется ваш компьютер, - это использовать отладчик DOS.
Для этого необходимо запустить эту программу и выдать ей следующую команду:
D F000:FFF0
После этого на вашем экране появится загадочная строка символов. Горизонтально она разделена на три части. Слева указывается адрес памяти, с которого начинается отображение 16 байт. Центральный блок символов содержит индивидуальное значение каждого из этих 16 байт памяти. Правый блок представляет эти значения в кодах ASCII. У правой границы строки вы можете найти дату вашей BIOS.
Продолжение истории BIOS
Помимо описанной выше корректировки BIOS, она претерпела еще несколько изменений. Это происходило каждый раз для совершенствования системы при разработке новых компьютеров или новых системных плат в рамках уже существующих моделей. Наиболее радикальные изменения претерпела BIOS PS/2, когда был представлен микроканал. Улучшенная BIOS реализовывала возможности нового защищенного режима.
Каждая BIOS после PC-1 является расширяемой. Вовремя загрузки компьютера читается дополнительная секция кодов, содержащихся в дополнительных платах и их инструкции прибавляются к существующему диапазону. Например новые подпрограммы прерываний могут быть добавлены либо в функции существующих подпрограмм, либо могут быть изменены.
Во время самотестирования, после загрузки векторов прерываний ОЗУ, резидентный код BIOS заставляет компьютер проверить байты своего ПЗУ в соответствующем адресном диапазоне. Если найден значащий байт, процессор проверяет последующую секцию кодов, разрешая расширению BIOS после проведения циклической проверки блоков по 512 байт. Значения каждого байта в блоке суммируются по модулю, результат делится на 4096. Нулевой остаток говорит о том, что расширение BIOS имеет правильное значение.
Дополнительные секции кодов маркируются специальным значением, помещаемым перед ним. Затем после этих двух байтов - третий байт указывает дополнительную длину секции BIOS. Значение третьего байта указывает на количество блоков по 512 байт, необходимых для дополнительных кодов.
Если система распознала соответствующую секцию кодов, выполняемая программа BIOS переходит к четвертому байту расширяемой BIOS и выполняет любые функции, описанные здесь в машинных кодах. После выполнения инструкции расширенной BIOS управление передается резидентной BIOS. Затем система продолжает поиск дополнительных блоков расширенной BIOS. После завершения этой процедуры начинается процесс загрузки компьютера с диска.