Alenka_kiss
Гость
|
|
« Ответ #4 : 08-01-2007 07:20 » |
|
Этот драйвер позволяет любой системной или прикладной программе вывести на экран символ с заданным цветом. Драйвер состоит из двух ло-гических процедур, доступных извне драйвера: «Инициализация экрана», «Вывод символа». Кроме того, драйвер включает внутреннюю процедуру «Установка курсора», а также две структуры данных - переменные XT иYT, содержащие текущие координаты курсора. Использование этих перемен-ных позволяет повысить скорость пересчета новых координат курсора при обработке символов “Возврат каретки” и “Перевод строки”. Логическая процедура “Инициализация экрана” не имеет параметров. Она выполняет первоначальную подготовку экрана (через его адаптер) к последующей работе с ним, а также выполняет первоначальную подготовку самого драйвера. Алгоритм этой логической процедуры вклю-чает шаги: Шаг 1. Очистка используемой (нулевой) видеостраницы путем за-полнения ее символами пробела с фоном требуемого цвета. Шаг 2. Задание нулевой видеостраницы в качестве отображаемой на экране. Для этого в регистры начального адреса сканирования (см. табл.1) следует поместить 0. Шаг 3. Задание максимальной толщины курсора. Шаг 4. Запись нулевых значений в переменные XT иYT. Шаг 5. Установка курсора в начальную позицию экрана. Шаг 6. Объявление резидентным модуля “Вывод символа”. В том случае, если драйвер экрана предназначен для обслуживания одной-двух прикладных программ, инициируемых достаточно редко, шаг 6 отсутствует. Так как в этом случае нецелесообразно постоянно держать драйвер в ОП. Гораздо лучше объединить его и прикладную программу в единый загрузочный модуль. Логическая процедура “Вывод символа” имеет два входных пара-метра: S – код символа, М – цвет символа (0 < M < 7). Двоичное представ-ление числа M определяет цвет в соответствии с таблицей 2. Например, M=2=010b задает зеленый цвет символов. Алгоритм данной логической процедуры: Шаг 1. Если символ S есть «Возврат каретки» или «Перевод строки», то переход на шаг 3. Шаг 2. Запись символа и его атрибутов в видеопамять. Шаг 3. Запись новых значений в переменные XT и YT . Шаг 4. Установка следующей позиции курсора. Внутренняя процедура «Установка курсора» не имеет параметров. Она выполняет установку курсора в ту позицию, которая соответствует значениям переменных XT и YT. Результат выполнения работы оформляется в виде двух файлов с расширением asm (исходные тексты прикладной программы и драйвера) и одного файла с расширением com (загрузочный модуль прикладной про-граммы и драйвера). Все файлы должны быть помещены в каталог LAB1.
Рекомендуемый план отладки Рекомендуется выполнять отладку драйвера экрана не целиком, а по-степенно наращивая его функции в соответствии со следующим планом. Шаг 1. Прикладная программа выполняет вызов процедуры инициа-лизации, за которым следуют ожидание нажатия клавиши и возврат в MS-DOS. Процедура инициализации выполняет только очистку экрана задан-ным цветом фона. Шаг 2. Отличается от шага 1 только тем, что процедура инициализа-ции выполняет не только очистку экрана, но и первоначальную установку курсора. Шаг 3. Прикладная программа выполняет вызов процедуры инициа-лизации, за которым следуют ожидание нажатия клавиши. Далее она в цикле вызывает процедуру вывода символа, передавая ей каждый раз на вход код следующего символа из символьной строки, заданной в приклад-ной программе. Данная строка завершается каким-то особым байтом, на-пример, 24h. После завершения вывода прикладная программа ожидает нажатия клавиши и выполняет возврат в MS-DOS. Шаг 4. Отличается от шага 3 тем, что выводимая на экран символь-ная строка содержит кроме других символов «возврат каретки» и «перевод строки». Примечание 1. При выполнении отладки обычно требуется уметь остановить выполнение программы в заданной точке. В данной работе при выполнении прикладной программы подобная остановка используется дважды. Во-первых, после завершения процедуры инициализации, так как требуется время на перемещение курсора. Во-вторых, программа приоста-навливается перед возвратом в MS-DOS. В противном случае сразу же по-сле возвращения управления из прикладной программы в MS-DOS, по-следняя заменит на экране выходные данные программы своими данными. Для выполнения остановки программы можно воспользоваться сис-темным вызовом BIOS «ожидание ввода с клавиатуры” – INT 16h (функ-ция 0), поместив в программу строки:
MOV AH, 0 ; Номер функции INT 16h ; Вызов подпрограммы BIOS
Примечание 2. Обе программы не должны содержать системных вызовов MS-DOS и BIOS, выполняющих вывод на экран. Примечание 3. При отладке подпрограммы, выполняющей работу с курсором, надо помнить, что подпрограммы MS-DOS и BIOS, выполняю-щие вывод на экран, будут игнорировать вашу установку курсора и вернут его в то положение, которое он занимал до начала выполнения вашей про-граммы (соответствующее 2-х байтовое значение хранится в области дан-ных BIOS). Например, если вы пользуетесь отладчиком, то во время рабо-ты курсор перестает “слушаться” вашу программу и не двигается с места. Примечание 4. Так как драйвер экрана и прикладная программа на-ходятся в разных исходных файлах, то имена программных процедур, вы-полняющих реализацию логических процедур «Инициализация экрана» и «Вывод символа»должны быть перечислены в операторах PUBLIC и EXTRN, причем оператор EXTRN с атрибутом NEAR. Примечание 5. Если программная процедура выполняет запись в ре-гистр DS, то в начале этой процедуры обязательно требуется сохранить, а в конце ее восстановить прежнее содержимое этого регистра. Иначе в вызы-вающей программе будет нарушена адресация данных.
|