Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Переключение между текстовыми страницами. Часть 2
ОГЛАВЛЕНИЕ
Средний уровень.
Функция 5 прерывания 10H выбирает текущую страницу дисплея для
вывода. Надо просто поместить номер страницы в AL:
;---установка видимой страницы
MOV AH,5 ;номер функции
MOV AL,2 ;номер страницы (начиная с 0)
INT 10H ;устанавливаем страницу
Однако эта функция не устанавливает страницу, на которую будет
идти вывод. Любое из прерываний BIOS, которые выводят на экран
(функции прерывания 10H), требует чтобы номер страницы был указан
в качестве входного параметра в одном из регистров. Однако все
прерывания вывода на экран MS DOS пишут на текущую видимую стра-
ницу. Таким образом, для "закулисных" операций Вам необходимо
пользоваться прерыванием 10H.
Для получения информации о текущей странице надо выполнить
функцию F прерывания 10H, которая возвращает статус дисплея.
Номер страницы при этом возвращается в BH.
Низкий уровень.
Дисплейные страницы выбираются за счет изменения точки видео-
памяти, начиная с которой монитор принимает данные. Эта точка
памяти устанавливается регистрами 12 (старший байт) и 13 (младший
байт) микросхемы 6845, которые называются регистрами стартового
адреса. Значения адресов раздела страниц для буфера, начинающего-
ся с B800 такие:
40 символов 80 символов
страница 0 0000H 0000H
1 0400H 0800H
2 0800H 1000H
3 0C00H 1800H
4 1000H
5 1400H
6 1800H
7 1C00H
В [4.1.1] объясняется как программировать регистры микросхемы
6845, а в [4.5.4] содержится пример программирования стартового
адреса. В последнем примере надо просто присвоить BX одно из
значений вышеприведенной таблицы. Конечно, при этом устанавли-
вается только выводимая страница. Для записи в определенную стра-
ницу на низком уровне надо использовать одно из значений таблицы
в качестве смещения в видеобуфере при прямом отображении в па-
мять.
Поскольку прямое отображение в память работает очень быстро,
то иллюзия страниц может быть легко создана на монохромном дисп-
лее. Выделите блок размером 4000 байтов для хранения страницы.
Хотя монохромный адаптер не может непосредственно читать из обыч-
ной памяти, содержимое этого буфера и видеобуфера можно обменять
настолько быстро, что никто не зметит разницы. Следующая процеду-
ра обменивает содержимое этих двух областей.
;---в сегменте данных
PPAGE DW 2000 DUP(720H) ;заполняем буфер пробелами
;---пересылка между псевдостраницей и видеобуфером
MOV AX,0B000H ;указываем на видеобуфер
MOV ES,AX ;
MOV AX,SEG PPAGE ;указываем на псевдостраницу
MOV DS,AX ;
REPEAT: MOV DI,0 ;DI на начало видеобуфера
MOV SI,OFFSET PPAGE ;SI на начало псевдостраницы
CLD ;направление вперед
MOV CX,2000 ;будем пересылать 2000 слов
NEXT_WORD: MOV BX,ES:[DI] ;берем слово из видеобуфера в BX
LODSW ;слово из псевдостраницы в AX
STOSW ;слово из AX в видеобуфер
MOV DS:[DI]-2,BX ;слово из BX в псевдостраницу
LOOP NEXT_WORD ;
PCjr хранит регистр страницы в порте с адресом 3DFH. Значение
битов этого регистра следующее:
биты 2-0 какая страница выводится (от 0 до 7)
5-3 какая страница пишется (от 0 до 7) при выводе
по адресу сегмента B800H
7-6 = 00 для всех текстовых режимов
= 01 для графических режимов с 16K
= 11 для графических режимов с 32K