Зрушення зображення

Програми зрушення переміщають текстову інформацію або нагору, або вниз, у залежності від викликаної функції. Програми зрушення також забезпечують деякі засоби організації вікон (фрагментів екрана) на екрані дисплея - тобто BIOS може зрушувати тільки частина вмісту екрана. Вхідні параметри програми зрушення визначають прямокутник, розташований на екрані. Він задає верхній лівий і правий нижній кути області зрушення. Відеопрограма BIOS зрушує дані тільки в цій області. Інша частина екрана не міняється.

Ми вже бачили користь зрушення вікон при вивченні операційної системи і мови Бейсік, яке використовували для зрушення BIOS. Якщо працює 80-символьний дисплей, DOS установлює верхній лівий кут вікна зрушення рівним (0, 0), а нижній правий кут (24, 79). Так зрушується весь екран. Але Бейсік використовує двадцять п'ять рядків для індикації стану дисплея, і тільки 24 рядка відводить під зображення програми. Коли Бейсік зрушує екран за допомогою базової системи введення-висновку, він установлює верхній лівий кут у крапці (0, 0), а правий нижній кут - у крапці (23, 79). Із-за того, що останній рядок залишається за межами зрушення, вона не переміщається під час зрушення. У наступній главі приведений приклад зрушення вікна, який викликаний з програми на Бейсіку.

Відеопрограма BIOS виконує зрушення за допомогою переносу символів і атрибутів у дисплейному буфері. Програма зрушення не змінює стартової адреси дисплейного буфера; такий метод зрушення був би швидший, але не дозволяє прикладній програмі визначати, куди повинні потрапити окремі символи. Спосіб зрушення, реалізований у BIOS, підходить для звичайної роботи екрана. Помітимо також, що програма зрушує зображення при необхідності більш ніж на один рядок. Звичайно програма зрушує зображення на один рядок. Функція зрушення відеопрограми BIOS дозволяє зрушити вміст екрана на кілька рядків. Якщо ж кількість рядків зрушення дорівнює нулю, програма BIOS очищає екран. Це - швидкий спосіб очищення всього екрана або його частини.

Коли програма працює в 80-символьному режимі на кольоровому графічному адаптері, вона не може записувати або читати його текст у довільний момент часу. Якщо програма буде модифікувати буфер не в строго визначені моменти часу, на екрані з'являться перешкоди. Оскільки програма зрушення читає і записує великі кількості даних, вона повинна бути написана з урахуванням проблеми перешкод. Якщо подивитися текст програми обслуговування операції зрушення, то можна побачити, що BIOS обслуговує режим 80*25 кольорової плати (змінна CRT_MODE дорівнює 2 чи 3), як спеціальний випадок. У випадку операцій зрушення ця підпрограма BIOS чекає доти, поки не виникне вертикальний зворотний хід променя дисплея. Це означає, що апаратура адаптера видала на екран весь вміст буфера і готова почати новий кадр. (Апаратура адаптера повторює цей процес регенерації екрана 60 разів у секунду). З появою вертикального зворотнього ходу програма BIOS виключає дисплей і виконує зрушення. Коли програма зрушення перемістить усі символи, вона знову включає дисплей. Це викликає коротке миготіння дисплея. Якщо ви уважно подивитеся на екран під час зрушення, то побачте, що верхні його шість рядків трохи темніші інших. Це відбувається із-за того, що операція зрушення займає трохи більше часу, ніж один період регенерації екрана. Тому верхні шість рядків виключаються на два інтервали регенерації, а весь інший екран - тільки на один інтервал. Метод, що допускає появу перешкод на екрані, настільки непривабливий, що описаний метод переважніший. Ви можете написати кілька програм, щоб спробувати інші методи.