Глава 4. Вывод на терминал.

Раздел 5. Сдвиг экрана и страницы.

4.5.4 Сдвиг между страницами текста.

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

Аппаратный сдвиг достигается за счет изменения стартового адреса дисплея, который является числом, указывающим на символ в видеобуфере, который будет выводиться в левом верхнем углу экрана. Добавление 80 к этому числу "сдвигает" весь экран на одну строку вверх, а вычитание 80 - на одну строку вниз. В режиме с 40 символами в строке надо вместо 80 прибавлять или вычитать 40. Hа рис. 4-7 приведена диаграмма аппаратного сдвига.

Отметим, что регистр стартового адреса не считает байты атрибутов, поэтому Вы должны вычислять адреса памяти по-другому, чем при прямом отображении в память. Имейте также ввиду, что несмотря на наличие разрывов памяти между границами страниц (96 байтов между 80-символьными страницами и 48 байтов между 40-символьными страницами) микросхема 6845 пропускает эти области и сдвиг непрерывно происходит с одной страницы на следующую. Аппаратный сдвиг происходит настолько быстро, что Вам может оказаться необходимым вставить процедуру задержки, чтобы пользователь имел возможность увидеть насколько сдвинулся экран.

BIOS хранит текущее значение регистра стартового адреса в переменной в своей области данных. Эта двухбайтная переменная расположена по адресу 0040:004EH.

Hизкий уровень.

Стартовый адрес содержится в регистрах 12 (старший байт) и 13 (младший байт) микросхемы 6845. В {4.1.1} объясняется работа этой микросхемы. Прежде чем адресуемый байт направляется в порт с адресом 3D5H, необходимо послать номер адресуемого регистра в порт 3D4H. В данном примере экран сдвигается вверх на одну строку. Переменная START_ADDRESS содержит адрес первого символа текущей верхней строки экрана.
MOV BX,START_ADDRESS ;начинаем с начала буфера
ADD BX,80 ;сдвигаем на 1 строку (80 символов)
MOV DX,3D4H ;вывод в адресный регистр
MOV AL,12 ;адресуем регистр 12
OUT DX,AL ;посылаем запрос
INC DX ;теперь выводим в командный регистр
MOV AL,BH ;старшее слово в AL
OUT DX,AL ;посылаем его в регистр 12
DEC DX ;обратно к адресному регистру
MOV AL,13 ;адресуем регистр 13
OUT DX,AL ;посылаем запрос
INC DX ;снова командный регистр
MOV AL,BL ;младшее слово в AL
OUT DX,AL ;посылаем в регистр 13


<~-4.5.3 Переключение между текстовыми страницами.
Содержание
Глава 5. Дисковые накопители.-~>

Сайт управляется системой uCoz