Ну что, мальчики и девочки, лоадер работает.
Смотрите сами. Поясню. На видео заснят процесс загрузки ПСПЗУ с адреса C000h. Потом запуск. Порядок загрузчика такой (подразумевается, что карта вставлена):
1. Инитим систему. Этот блок будет несколько разный для стандартного спеца и для МХа, но по сути ничего особенного.
2. Инитим карту. Тут подход стандартный для ввода карт в SPI режим и все такое.
3. Ищем MBR. Признаков, по которым он детектится достаточно много и они описаны в литературе. Собственно, алгоритм мало чем отличается от нативного РСшного. Если MBR найден, то просматривается таблица разделов и ищется первый подходящий раздел FAT12/FAT16. В случае обнаружения раздела вносятся коррективы координат файловой системы.
4. Ищем MBS (бут сектор т.е.). В случае обнаружения (информация о признаках так же присутствует в литературе) выясняется какой системе он принадлежит. Если FAT12/FAT16, то считывается вся необходимая служебная информация.
5. В случае обнаружения валидной файловой системы просматривается корневая директория на предмет файла BIOS.BIN. Если файл найден, то начинается его загрузка по заданному адресу (в данном случае С000h) по цепочке кластеров, пока либо не кончится файл, либо не упрёмся в лимит памяти (исключается закальцовка в 0000 и порча настроек аппаратуры).
6. Создается шлюз в экране из простой команды для отключения загрузочного ПЗУ (только для МХа, для стандартного специалиста не требуется: монитор сам отключит ПЗУ настроив системный ППА, на котором висит схема НП) и передается ему управление. Он передает управление по адресу запуска.
При записи видео было использовано 2 карты: первая ММС на 16МБайт с FAT12, а вторая SD 512МБайт с FAT16. На первой был записано стандартное специалистовское ПСПЗУ а на второй монитор MAGIC_WL для МХа. Обратите внимание, что на второй карте был MBR, который был корректно распознан.
Все. Теперь обоснование: загрузчик использует несколько ячеек ОЗУ для себя (около 30), их располагаем там же, где обычные системные ячейки. Загрузчик использует 512 байт экрана (BE00h-BFFFh) в качестве буфера считываемого сектора, для загрузки служебной информации. Сам файл ложится сразу по месту посадки. Так же используются 8 ячеек (BDF8h-BDFFh) для шлюза запуска. Почему экран? Чтобы не портить остальное ОЗУ. Т.е., сброс не портит ОЗУ, только восстанавливает систему. А значит данные пользователя не портятся, т.к. экран все равно не хранит информацию пользователя. Но так как используется не много ОЗУ, то можно спрятать буфер в системной области (не в экране, если кого раздражают эти точки справа), которая будет задокументирована.
Теперь об аппаратной части. МХ переделывается минимально: нужно подрезать ROM диск до 32КБайт. Т.е., маппер такой же, как и требуемый для теста ОЗУ. ROM диск большой не требуется, потому что его заменяет теперь карта памяти. Стандартный специалист переделывается больше: нужно изменить схему НП так, чтобы ПЗУ перекрывало не все адресное пространство, а только 0000h-7FFFh. Схему выборки ПЗУ по адресам C000h-EFFFh отключить, открывая тем самым ОЗУ, которое было там в тени (должны быть установлены 565РУ5). ПЗУ должно находиться по младшим адресам всегда, до срабатывания схемы НП (после программирования системного ППА, ножка НП=0, это сигнал к отключению ПЗУ, сигнал к включению ПЗУ обратно является только сброс).
[свернуть]