Запуск процессора описан в 9-й главе третьего тома интеловского мануала. Однако аппаратный сброс затрагивает не только процессор, но и всю прочую электронику, включая северный и южный мосты. Благодаря этому они устанавливают "стандартное" отображение адресов, по которому микросхема ПЗУ BIOS будет занимать самые старшие адреса в районе 4 Гбайт (заканчивая FFFF_FFFF; начало зависит от объёма BIOS). Кроме того, на старшую часть ПЗУ BIOS (последние 64 Кбайта) будут отображаться физические адреса 000F_0000–000F_FFFF — т.е. именно те, где располагался BIOS на первых ПК. Процессор начинает выполнение, имея базовый адрес сегмента кода, равный FFFF_0000 (сам CS содержит F000), и содержимое IP=FFF0, что обеспечивает выборку первой команды по физическому адресу FFFF_FFF0 — из последних 16 байт ПЗУ BIOS. Этой командой будет длинный переход, обеспечивающий загрузку в CS:IP адреса реальной точки входа в код BIOS.
"Затенение" ПЗУ BIOS выполняется кодом BIOS — естественно, опираясь на функции чипсета. Оно осуществляется очень просто: сначала северный мост настраивается так, чтобы обращения на запись в диапазоны BIOS отправлялись в ОЗУ, а обращения на чтение — к южному мосту (и через него к микросхеме ПЗУ BIOS). После этого содержимое микросхемы ПЗУ BIOS считывается и записывается по тем же самым адресам, что приводит к его копированию в ОЗУ. Наконец, северному мосту даётся команда запретить запись по адресам BIOS, а запросы на чтение отображать на ОЗУ. В результате все последующие доступы по адресам BIOS направляются к ОЗУ, а не к ПЗУ, и выполняются намного быстрее.
|