Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Программирование драйвера экрана, вывод символов  (Прочитано 18204 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Alenka_kiss
Гость
« : 07-01-2007 09:39 » 

Выполнял кто-нибудь такую лабораторную:
Требуется реализовать программно нерезидентный драйвер экрана с видеоадаптером CGA. А также разработать прикладную программу, выполняющую вывод на экран фамилии и имени, и, возможно, другой информации, используя для вывода на экран ваш драйвер. Цвет символов белый, выводимых на экран, а также цвет фона черный. (ЭВМ и вычислительные системы, язык - Ассемблер).
Может остались у кого исходники? Быть такого не может
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-01-2007 13:04 » 

Alenka_kiss, задачка твоя к реальной практике отношения не имеет, т.к. все это делается на порядок проще, без прямого управления железом, потерявшем актуальность лет 15 назад. Так что сомневаюсь, что тебе кто-нибудь поможет при такой постановке задачи.

Я могу помочь наводящими вопросами - делать все равно будешь сама (или кого найдешь).
Уточни след. вопросы:
1. Драйвер должен управлять CGA посредством портов ввода-вывода или можно использовать ф-ии Video BIOS ?
2. Интерфейс драйвера, состав ф-ий. По описанной задаче достаточно одной ф-ии - вывода. Уточни.
3. Программный интерфейс ввода. Я бы воспользовался ф-иями DOS. Уточни.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 07-01-2007 16:37 » 

RXL, может не очень в тему. а почему прямое управления железом потеряла актуальность?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-01-2007 17:14 » 

Razor, слишком много железа потому что Улыбаюсь
Записан

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, то в начале этой процедуры обязательно требуется сохранить, а в конце ее восстановить прежнее содержимое этого регистра. Иначе в вызы-вающей программе будет нарушена адресация данных.
Записан
Alenka_kiss
Гость
« Ответ #5 : 08-01-2007 07:50 » 

В программе с выводом текста у меня не получается выводить текст нужным цветом. Получилось только с символом. Я вот тут изобразила голубые звездочки.

Code_seg SEGMENT
         ASSUME CS:Code_Seg
         ORG    100h
Star     PROC   NEAR
        MOV    AH, 09
        MOV AL, 2Ah
        MOV    BH, 00 ; straniza 0
         MOV    BL, 0bh ; ystanovka zveta
         MOV CX, 5
int 10h
MOV AH, 0
INT 16h
                 Star     ENDP
        Code_seg ENDS
         END   Star

А на счет драйвера... не знаю даже с чего начать.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 08-01-2007 12:03 » 

Alenka_kiss, ф-ии Video BIOS вызываются через int 10h - видимо так тебе придется работать. Там же устанавливается нужный режим видео, там же ф-ии вывода по символьно. Чтоб вывести строку, напиши попрограмму, выводящую строку посимвольно.

Чтобы бороться с конфликтом позиции курсора, устанавливай ее каждый раз перед выводом символа. Конечно, для этого надо запоминать вычислять и хранить позицию в своей программе.

Запрета ф-ий ввода MSDOS я не вижу - значит их можно использовать.

Рекомендую хороший хелп: techhelp - поищи в инете или на нашем сайте (помнится, я ее уже не раз выкладывал).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PRO100
Гость
« Ответ #7 : 18-01-2007 16:44 » 

Alenka_kiss, Привет! Я сейчас тоже пишу такую тему в Assemblere, у Вас есть продвижение в Программирование драйвера экрана и вывод символов
« Последнее редактирование: 18-01-2007 16:45 от PRO100 » Записан
PRO100
Гость
« Ответ #8 : 18-01-2007 17:09 » new

Есть 2 тома по прерываниям BIOS

Например:
Прерывание 10h - Функция 00h
Установить ВИДЕОРЕЖИМ
Назначение: Устанавливается операционные условия дисплея.
Применение: Все машины.
Ограничение: Отсутствуют.
Регистры при вызове:
AH=00
AL= режим (таблица 5-1)
Таблица на 16 страницах все режимы какие угодно  С ума сойти...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines