Во всех системных платах есть микросхема, в которой записано программное обеспечение, называемое BIOS или ROM BIOS. Эта микросхема содержит стартовые программы и драйверы, необходимые для запуска системы и функционирования основного аппаратного обеспечения. В ней также содержатся процедура POST (самотестирование при включении питания) и данные системной конфигурации. Все эти параметры записаны в CMOS-память, которая питается от литиевой батарейки, установленной на системной плате. Эту энергонезависимую память часто называют NVRAM (Non-Volatile RAM).
Таким образом, BIOS представляет собой комплект программ, хранящихся в одной или нескольких микросхемах. Эти программы выполняются при запуске компьютера до загрузки операционной системы. BIOS в большинстве PC-совместимых компьютеров выполняет четыре основные функции.
Память типа ROM (Read-Only Memory, или ПЗУ) может постоянно (или практически постоянно) хранить данные. Эти записанные данные хранятся в памяти даже при отключении питания. Таким образом, для хранения стартовых процедур (и BIOS) лучше всего подходит память ROM. Аналогичная память используется и в других устройствах с собственной BIOS, например в видеоадаптерах.
Особо отмечу, что ROM и оперативная память — не противоположные понятия. На самом деле ROM представляет собой часть оперативной памяти системы. Другими словами, часть адресного пространства оперативной памяти отводится для ROM. Это необходимо для хранения программного обеспечения, которое позволяет загрузить операционную систему; в противном случае процессор сразу после включения питания не найдет в памяти команды, которые ему следует выполнить.
Например, сразу при включении компьютера счетчик команд автоматически принимает значение (адрес) FFFF0h; команды, размещенные по этому адресу, должны обеспечить загрузку операционной системы. Этим командам отводится ровно 16 байт, от конца первого мегабайта оперативной памяти и от конца ROM. Если бы эти адреса указывали на ячейки обычной памяти, все хранимые в ней данные, в том числе и команды, исчезли бы при выключении питания и процессор при следующем включении не нашел бы там никаких команд. Но, если этот адрес указывает на ячейку ROM, программа запуска системы в неизменном виде выполняется каждый раз при включении компьютера.
Обычно первым адресом ROM системы является F0000h или E0000h, расположенный за 64 или 128 Кбайт от конца первого мегабайта. Поскольку емкость ROM обычно равна 128 Кбайт, программы ROM полностью занимают последние 128 Кбайт первого мегабайта, включая критический адрес FFFF0h первой команды запуска. Емкость современных микросхем ROM может достигать 256 или 512 Кбайт. Такой увеличенный объем позволяет хранить драйверы интегрированных на системной плате устройств. К примеру, ROM интегрированной на системной плате видеосистемы обычно находится в адресах C0000h–C7FFFh, а ROM прочих интегрированных устройств, таких как адаптеры сети и SCSI, — в адресах C8000h–DFFFFh.
На рисунке показана карта распределения первого мегабайта памяти. Замечу, что верхние адреса памяти, зарезервированные для ROM BIOS материнской платы и адаптеров, находятся в конце первого мегабайта.
Кажется странным, что при запуске компьютер начинает выполнять команду, расположенную за 16 байт от конца ROM, но в этом есть свой смысл. Просто по этому адресу помещается команда перехода JMP, после выполнения которой процессор переходит к фактическому началу программы; в большинстве случаев оно близко к адресу F0000h, который расположен примерно на 64 Кбайт ранее в карте памяти. Это все равно что начинать чтение книги с 16-й страницы от конца; причем на ней должен быть указан номер страницы, с которой фактически начинается изложение. Зато подобное соглашение позволяет свободно изменять объем ROM.
Основной код BIOS содержится в микросхеме ПЗУ на системной плате, но на плата адаптеров также есть аналогичные микросхемы. Они содержат вспомогательные подпрограммы BIOS и драйверы, необходимые для конкретной платы, особенно для тех плат, которые должны быть активизированы на раннем этапе начальной загрузки, например для видеоадаптера. Платы, не нуждающиеся в драйверах на раннем этапе начальной загрузки, обычно не имеют ПЗУ, поскольку их драйверы могут быть загружены с жесткого диска позже — в процессе начальной загрузки.
Программа, хранящаяся в ПЗУ системной платы, сканирует специальную область ROM оперативной памяти (адреса C0000–DFFFFh) в поисках пары байтов сигнатуры (55AAh), которая указывает на начало ПЗУ адаптеров.
Адреса ПЗУ всех адаптеров должны начинаться с 55Aah, иначе системная плата просто их не распознает. Третий байт указывает размер ПЗУ в единицах, кратных 512 байт, которые называются абзацами, а четвертый байт соответствует фактическому началу драйверов. Байт размера используется ПЗУ системной платы в целях тестирования. ПЗУ системной платы складывает все байты в ПЗУ, после чего делит полученную сумму на количество байтов. Остаток от деления должен быть равен 100h. Поэтому при написании программы для ПЗУ адаптера программист обычно использует байт “дополнения”, позволяющий получить необходимую контрольную сумму. Используя значение контрольной суммы, системная плата проверяет ПЗУ каждого адаптера во время выполнения процедуры POST и помечает те из них, которые были повреждены.
Базовая система ввода-вывода системной платы автоматически выполняет программы в ROM любого адаптера, который она находит в процессе сканирования. Процесс обнаружения и инициализации видеоадаптера можно наблюдать в большинстве компьютеров при включении питания и во время выполнения POST.
Микросхемы ПЗУ по своей природе очень “медленные” — время доступа равно 150 нс при времени доступа запоминающего устройства DRAM 10 нс или меньше. Поэтому во многих системах ROM затеняется, т.е. ее содержимое при запуске копируется в микросхемы динамической оперативной памяти, чтобы сократить время доступа в процессе функционирования. Процедура затенения копирует содержимое ROM в оперативную память, присваивая ей адреса, первоначально использовавшиеся для ПЗУ, которое затем фактически отключается. При этом имитируется работа ПЗУ на полной скорости оперативной памяти.
Затенение эффективно главным образом в 16-разрядных операционных системах типа DOS или Windows 3.x. Если компьютер работает под управлением 32-разрядной операционной системы, то затенение фактически бесполезно, так как эти системы не используют 16-разрядный код из ROM. Вместо него они загружают в оперативную память 32-разрядные драйверы, заменяя ими 16-разрядный код BIOS, который был использован в процессе запуска системы.
Средство управления затенением находится в программе настройки BIOS, о которой мы поговорим ниже.
Существует четыре типа микросхем памяти ПЗУ.
Независимо от типа ROM данные в ней сохраняются до тех пор, пока не будут стерты или перезаписаны преднамеренно.
В память PROM выпускается в чистом виде, и в нее можно записать любые данные. Она была разработана в конце 1970-х годов компанией Texas Instruments и имела емкость от 1 Кбайт (8 Кбит) до 2 Мбайт (16 Мбит) и больше. Эти микросхемы могут быть идентифицированы по номерам вида 27nnnn в маркировке, где 27 — PROM типа TI, а nnnn — емкость кристалла (микросхемы) в килобитах. Например, в большинстве компьютеров с PROM использовались микросхемы 27512 и 271000, которые имели емкость 512 Кбит (64 Кбайт) или 1 Mбит (128 Кбайт).
Примечание!
Начиная с 1981 года во всех автомобилях, продаваемых в США, использовались бортовые компьютеры с различными микросхемами ROM, содержащими программное обеспечение системы управления. Например, под приборной панелью автомобиля Pontiac Turbo Trans Am 1989 года выпуска находился бортовой компьютер, содержащий микросхему 2732 PROM электронного блока управления (Electronic Control Module — ECM) с объемом памяти 32 Кбит (или 4 Кбайт). В эту микросхему также входила часть системного программного обеспечения автомобиля и полные таблицы данных, описывающих процесс зажигания, подачи топлива и другие параметры двигателя. Микросхемы PROM, используемые для хранения рабочих программ, очень часто применялись в интегрированных компьютерах различных устройств.Хотя мы говорим, что эти микросхемы изначально не содержат никакой информации, на самом деле при изготовлении они прописываются двоичными единицами. Другими словами, микросхема PROM емкостью 1 Мбит содержит 1 млн. единиц (если быть точным, то 1 048 576). При программировании такой “пустой” PROM в нее записываются нули. Этот процесс обычно выполняется с помощью специального программирующего устройства (см. рисунок ниже).
Процесс программирования часто называется прожигом, так как именно этот термин технически правильно описывает сам процесс. Каждую единицу можно представить как неповрежденный плавкий предохранитель. Большинство таких микросхем работают при напряжении 5 В, но при программировании PROM подается более высокое напряжение (обычно — 12 В) по различным адресам в пределах адресного пространства, отведенного для микросхемы. Это более высокое напряжение фактически записывает “0”, сжигая плавкие предохранители в тех местах, где необходимо преобразовать 1 в 0. Хотя превратить единицу в нуль можно, этот процесс необратим (т.е. нельзя преобразовать 0 в 1).
Программирующее устройство исследует программу, которую необходимо записать в микросхему, и затем выборочно изменяет в микросхеме 1 на 0 только там, где это необходимо. Поэтому микросхемы PROM часто называются микросхемами OTP (One Time Programmable — программируемые один раз). Они могут быть запрограммированы только однажды. Большинство микросхем PROM стоит совсем недорого, примерно 3 доллара. Поэтому при замене программы в PROM старая микросхема выбрасывается, а новая прожигается в соответствии с новыми данными.
Процесс программирования PROM длится от нескольких секунд до нескольких минут в зависимости от емкости микросхемы и применяемого алгоритма. На рисунке показано типичное программирующее устройство, которое имеет несколько разъемов. Это устройство может программировать несколько микросхем сразу, экономя время при записи одних и тех же данных в нескольких микросхемах. Менее дорогие программирующие устройства имеют только один разъем.
Рекомендую использовать недорогое программирующее устройство компании Andromeda Research Labs (www.arlabs.com). Несмотря на невысокую цену оно может быть подключено к параллельному порту ПК; после подключения данные для программирования из файла на компьютере передаются в программирующее устройство. Кроме того, это устройство переносное. Управление им осуществляется с помощью меню, выводимого прилагаемой к нему программой. Программа содержит несколько функций, одна из них позволяет считывать данные с микросхемы и сохранять их в резервном файле; можно также записать данные в микросхему из файла и убедиться, что микросхема записана правильно или что она “пуста” перед началом программирования.
Перепрограммирование PROM!
Для перепрограммирования микросхемы PROM моего ‘‘Turbo Trans Am’’ 1989 года выпуска я даже воспользовался программатором ППЗУ, изменив заводскую регулировку скорости и ограничения оборотов, характеристики турбокомпрессора и блокировки гидротрансформатора, параметры зажигания, подачу топлива, скорость холостого хода и многое другое! Кроме того, я вывел на панель управления распределительную коробку, которая позволяла переключаться на одну из четырех микросхем даже во время движения автомобиля. Одна из созданных мною микросхем, которую я назвал ‘‘камердинером’’, отключает топливный инжектор при достижении скорости 36 миль/час и перезапускает его при уменьшении скорости до 35 миль/час и ниже. Думаю, что подобная модернизация будет особенно полезна для начинающих водителей, так как она позволяет определенным образом ограничивать скорость автомобиля или частоту оборотов его двигателя. Вторая созданная мною микросхема может использоваться в качестве противоугонного средства — она отключает подачу топлива во время парковки автомобиля, так что даже самый талантливый вор не сможет его угнать. Если вас интересуют микропроцессорные устройства переключения или какие-либо нестандартные микросхемы для Turbo Trans Am или Buick Grand National, обратитесь в компанию Casper's Electronics. Некоторые компании, например Fastchip, Superchips, Hypertech и Mopar Performance, предлагают целый ряд специальных микросхем PROM, позволяющих улучшить технические характеристики транспортных средств. Я установил в автомобиль ‘‘5.9l Jeep Grand Cherokee’’ микросхему Mopar Performance PCM, которая значительно улучшила рабочие характеристики двигателя и эксплуатационные качества машины.