У Поиска нет текстового режима, он постоянно находится в графическом режиме, даже когда яко-бы находится в текстовом - на самом деле это графический режим. Причем отображаемая память на экране монитора (откуда производится сканирование) не равна реальной памяти CGA, если правильно помню. Но суть не в этом, а в том что у IBM PC есть три способа вывести символ на экран: 1) с помощью функции BIOS; 2) с помощью функции DOS (которая внутри себя вызывает функцию BIOS); 3) Записав символ напрямую в видеопамять. То есть фактически два способа - через функции BIOS и напрямую в видеопамять.
Так вот, когда мы хотим отрисовать символ на экране через функцию ah=09h BIOS int 10h, то мы передаем в параметрах код символа, его аттрибут и символ выводится на экран по текущим координатам. Есть так же функции BIOS которые позволяют установить координаты, куда вывести символ. Поэтому когда мы вызываем функцию BIOS с помощью int 10h, то обработчик этого прерывания все знает - знает код символа, он просто находится в регистре, знает атрибут символа - он так же находится в другом регистре, знает текущие координаты символа - они хранятся просто где-то в обычной RAM. И тут у Поиска никаких проблем с пониманием куда нарисовать попиксельно очертания символа нет - все берется из регистров и/или обычной памяти.
В случае же если кто-то/что-то попыталось записать символ напрямую в текстовую видеопамять, то у Поиска возникает нюанс. Сам он как уже говорилось постоянно находится в графическом режиме и можно сказать понятия не имеет что кто-то там надумал писать в текстовую память. Поэтому работает дешифратор адреса на адреса B8000-xxxx, как только туда что-то пишет, то адрес защелкивается в защелки, данные защелкиваются в защелку, и дергается NMI. Проц бросает любые все свои дела и падает в обработчик NMI, читает из защелок адрес в который кто-то удумал что-то писать, пересчитывает этот адрес в адреса графического режима для попиксельного отображения символа, читает из защелки сам символ и начинает рисовать этот символ у себя в графическом режиме. После чего завершает обработку NMI и продолжает работу.
Таким образом основное отличие от функции BIOS и прямой записи в видеопамять в случае Поиска - это то, что при вызове функций BIOS пользователь(программист) сам передает все данные в регистрах в обработчик прерывания, а в случае прямой записи в текстовую видеопамять необходимо тормознуть проц, засейвить все значения в отдельных защелках, что бы когда проц упадет в NMI он понимал кто и куда что попытался записать что бы корректно это сэмулировать.
Плюс/минус как то так вроде по памяти, но не претендую на стопроцентную истину.





Ответить с цитированием