периодом строчной и/или кадровой развертки, в противном случае на экране могут появиться интерференционные помехи в виде «снега». Синхронизация осуществляется с помощью проверки байта состояния адаптера, получаемого из его регистра статуса (порт $3DA). Перед чтением/записью байта следует непрерывно читать содержимое этого порта до тех пор, пока нулевой или третий биты получаемого из него байта статуса не станут равны единице: О—и бит равен 1 в момент перехода луча раз— вертки к началу следующей строки (в это время луч погашен в течение примерно 7 мкс), а 3—й бит приобретает значение 1 в момент перехода луча к началу кадра (луч погашен в течение 4 мс). Для ПК минимальной производительности (процессор 8088 с частотой 4.77 мГц) 7 мкс достаточны для пересылки одного, а 4 мс — около 900 байт. Во всех случаях соответствующая часть программы реализуется с помощью встроенного ассемблера, а пересылка должна идти при закрытых прерываниях, чтобы исключить влияние таймера.

1.1.2. Адаптеры EGA и VGA

Совершенно по—другому осуществляется доступ к видеопамяти адаптеров EGA и VGA. В графическом режиме эта память (она начинается по адресу $АООО:$0000) разбивается на четыре так называемые битовые плоскости. Запись в один байт видеопамяти приводит к возможному изменению сразу четырех байт (по байту в каждой плоскости) и регулируется несколькими регистрами (см. рис. 1.1).

h00111.jpg

Рис.1.1. Схема записи в видеопамять адаптера EGA/VGA

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