Логика работы SL

        Вторичный загрузчик получает управление от первичного загрузчика, с поддержкой callback сервиса.Следующим шагом является загрузка файла сценария загрузки, однако, если он не будет загружен успешно, или в процессе его работы будут существовать критические ошибки, программа переходит к выполнению настроек предопределенных по умолчанию. Такой шаг оправдан тем, что не всегда можно произвести успешное чтение с носителя, допустим, если он имеет повреждение и считать файл конфигурации. Callback сервис первичного загрузчика при ошибках возвращает код ошибки, которую можно идентифицировать. На рисунке показан общий алгоритм работы SL.

 

Общая логика работы SL

Рисунок 1.

        В первом блоке (B1), мы получаем управление от первичного загрузчика и в соответствии со спецификацией на первичный загрузчик, модуль SL загружен по адресу 0x1000:0000. Сохраняем точку вызова callback сервиса первичного загрузчика, тип носителя с которого произведен старт первичного загрузчика, тип файловой системы. Инициализировав сегментные регистры мы получаем плоскую модель памяти в пределах сегмента (64 кб). Указатель стека установлен на значение 0х0. т.е он будет каждый раз уменьшаться и не перепишет код начала сегмента. Установим флаг направления, разрешим прерывания. Инициализировав видеорежим 80х25, этим очистим экран от мусора и подготовим к выводу на дисплей. 

        Проверка принадлежности процессора к типу i586 и выше. Суть проверки сводиться к тому. что бы исключить запуск SL на процессорах, которые не поддерживают набор команд, реализованный в загрузчик. 

        Во втором блоке (B2),  загрузим через callback сервис первичного загрузчика  файл сценария загрузки startos.ini. После выполнения callback запроса на загрузку файла(вызов функции ax = 1, указатель на информационную структуру = ds:di), в коде возврата callback сервиса возможна следующая информация: в bx 0 = успешно 1 = файл оказался слишком большим, буфер заполнен целиком и есть ещё данные файла 2 = файл не найден 3 = произошла ошибка чтения dx:ax = размер файла или 0xFFFF:FFFF, если файл не найден. По условию размер startos.ini не может превышать 64 кб,  первичный загрузчик исходя из спецификации, может загрузить блок информации до 192 кб и иметь код возврата в bx=0. При больших объемах файла, устанавливается код возврата в bx=1. Если в bx код возврата ! =0, то произошла ошибка загрузки. В файле sl_equ определены все предопределения, loop_read_startos_file значение данного параметра указывает кол-во попыток чтения файла конфигурации через callback сервис.