╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞
²²²²²²²²²²²² Драйвер дисплея DSPK.DRV ²²²²²²²²²²²²²²²²²²
╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛
Copyright(c) Oct-1992 by Крестьяников А.А.
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Драйвер DSPK.DRV ( DiSPlay driver ) - драйвер дисплея,
работающий в составе Concurrent BIOS; он максимально совмес-
тим с KCO6430 ( и несколько менее с SCO... ), но обеспечива-
ет более полное использование аппаратных ресурсов машины (
ESC+a,b,c,d,e ); кроме того, изъяты ( ESC+E,N,O,U,s ) или
модифицированы ( ESC+F,G ) некоторые архаичные функции.Более
подробное описание точек входа в драйвер и стандартные мак-
росы для работы с дисплеем ( и, кстати, звуком ) интересую-
щиеся могут посмотреть в файлах DSPK.H, BIOS.H, DRIVER.H.
Мнемоники управляющих символов описаны в CHARS.H .
²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
Управляющие символы и ESC-последовательности
Управляющие ( имеющие код 0..1FH ) символы полностью
соответствуют тому, что было во всех предыдущих версиях,
начиная с SCO... ESC-последовательности частично изменены
( ESC-последовательность - последовательность символов,
начинающаяся с символа ESC ( 1BH ) ). Далее приводится их
описание с исчерпывающими примерами использования, сгруппи-
рованное по их функциям ( .OUTCHAR и .BEEP - стандартные
макросы, описанные в файле DSPK.H ). Модифицированные функ-
ции помечены '*', удаленные '-', добавленные '+'.
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Первый символ ESC-последовательностей
1BH ^[ ESC Эскейп ( Escape, отмена ). Далее ESC-последова-
тельности будут представлены в виде ESC+символ
или ESC+символ+символ...
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Перемещение курсора
08H ^H LFT Перемещение курсора вправо, влево, вверх и вниз.
ESC+D .OUTCHAR LFT .OUTCHAR RGT
18H ^X RGT .OUTCHAR UP .OUTCHAR DN
ESC+C курсор возвратился на исходую позицию
19H ^Y UP .OUTCHAR ESC .OUTCHAR 'D'
ESC+A .OUTCHAR ESC .OUTCHAR 'C'
1AH ^Z DN .OUTCHAR ESC .OUTCHAR 'A'
ESC+B .OUTCHAR ESC .OUTCHAR 'B' алогично
09H ^I TAB Табуляция - перемещение курсора на ближайшую
справа позицию, кратную восьми. Например,если он
изначально находился на знакоместе 53 , то
.OUTCHAR TAB знакоместо 56
.OUTCHAR TAB знакоместо 0 следующей строки
0AH ^J LF Перевод строки ( LineFeed ) - перемещение курсо-
ра вниз; аналогична DN ( 1AH ) за тем исключе-
нием, что, дойдя до последней строки экрана, DN
переводит курсор на первую строку ( строка 0 ),
а LF сдвигает экран на одну строку вверх ( вызы-
вает скроллинг, или прокрутку экрана )
позиция 28,9 .OUTCHAR LF позиция 29,9
позиция 29,9 .OUTCHAR LF скроллинг, поз 29,9
позиция 29,9 .OUTCHAR DN позиция 0,9
0BH ^K HOM Установка курсора в начало экрана ( позиция 0,0)
ESC+H позиция 23,7 .OUTCHAR HOM позиция 0,0
0DH ^M CR Возврат курсора(CursorReturning) в начало строки
позиция 23,7 .OUTCHAR CR позиция 23,0
ESC+Y+(20H+строка)+(20H+позиция)
ESC+(80H+строка)+([80H+]позиция) []-необязательно
Прямое позиционирование курсора
.OUTCHAR ESC .OUTCHAR 'Y'
.OUTCHAR 36H .OUTSHAR 50H позиция 22,48
.OUTCHAR ESC
.OUTCHAR 89H .OUTSHAR 0A8H позиция 9,40
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Очистка
0CH ^L CLS Очистка всего экрана, установка курсора в его
начало ( позиция 0,0 )
позиция 7,15 .OUTCHAR CLS очистка, поз 0,0
16H ^V CLR Очистка строки от курсора до ее конца
ESC+K позиция 4,48 .OUTCHAR CLR очистка, поз 4,48
ESC+J Очистка экрана от курсора до его конца
позиция 9,18
.OUTCHAR ESC .OUTCHAR 'J' очистка, поз 9,18
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Кодировка символов
0EH ^N Переход в KOI7(рус) - русский алфавит
ESC+@ .OUTCHAR ESC .OUTCHAR '@'
.OUTCHAR 59H .OUTCHAR 79H печать ыЫ
ESC+\ Переход в KOI7(лат/рус)
.OUTCHAR ESC .OUTCHAR '\'
.OUTCHAR 59H .OUTCHAR 79H печать YЫ
0EH ^O Переход в KOI8 и ее подмножество KOI7(лат)
ESC+Z,ESC+] .OUTCHAR ESC .OUTCHAR 'Z'
.OUTCHAR 59H .OUTCHAR 79H печать Yy
.OUTCHAR 0D9H .OUTCHAR 0F9H печать ыЫ
.OUTCHAR 81H .OUTCHAR 0BBH печать │╩
ESC+[ Переход в кодировку IBM ALT
.OUTCHAR ESC .OUTCHAR '['
.OUTCHAR 59H .OUTCHAR 79H печать Yy
.OUTCHAR 0D9H .OUTCHAR 0F9H печать ╘╧
.OUTCHAR 81H .OUTCHAR 0BBH печать Б▀
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Управление формой и типом курсора
Следящим называется немигающий курсор, постоянно присутству-
ющий на экране. Неследящий курсор мигает и видим только при
обращении к функции CONIN драйвера клавиатуры KBDK.DRV. Сле-
дящий курсор может вызвать неприятный эффект своим мелькани-
ем по экрану во время его перерисовки, поэтому рекомендуется
его не использовать. К сожалению, некоторые программы ( на-
пример, dBASE II ) для ввода символа используют функции вида
LOOP:
CALL CONSTAT ; проверка состояния клавиатуры
OR A ; был ввод ?
JR Z,LOOP ; ввода не было
CALL CONIN ; собственно ввод
и, таким образом, в функции CONIN пребывают мизерное время,
так что неследящий курсор даже не успевает включиться. В
таких случаях приходится включать следящий курсор. Мораль:
используйте для ввода с клавиатуры вызов CALL CONIN, который
сам обеспечит необходимый цикл ожидания. Впрочем,приведенный
пример можно использовать в случае, если нужно ввести символ
без включения курсора ( что обычно и делает CopyK ).
ESC+Q Включение следящего курсора
.OUTCHAR ESC .OUTCHAR 'Q'
ESC+R Выключение следящего курсора
.OUTCHAR ESC .OUTCHAR 'R'
ESC+I+(шаблон)
Шаблон курсора. Каждый бит шаблона соответствует
одной строке растра в знакоместе ( D0-нижняя ).
.OUTCHAR ESC .OUTCHAR 'I'
.OUTCHAR 00000111B - прямоугольный курсор в
трех нижних строках растра
+ ESC+a Битовая карта ( BitMap ) курсора. Эта новая ESC-
последовательность дает возможность создать кур-
сор ЛЮБОЙ формы. Битовая карта - восемь последо-
вательных байт, указатель на которые передается
в HL во ВРЕМЯ ПЕРЕДАЧИ СИМВОЛА 'a'. Каждый байт
отвечает одной строке растра знакоместа, первый
байт - верхняя строка.
.OUTCHAR ESC
LD HL,CURBITMAP
.OUTCHAR 'a'
CURBITMAP:
DB 0,0,0,0,0,0FFH,0FFH,0FFH
- эквивалентно предыдущему примеру
.OUTCHAR ESC
LD HL,CURBITMAP
.OUTCHAR 'a'
CURBITMAP:
DB 0FFH,81H,81H,81H,81H,81H,81H,0FFH
- пустой прямоугольник на все знако-
место ( устанавливается изначально )
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Управление цветом
Палитра - байт, биты которого имеют следующее значение :
D2..0 - цвет точек; D5..3 - цвет фона; D6 - повышенная яр-
кость ( Bright ); D7 - мерцание ( Flash ). Цвета кодируются
следущим образом: 0 - черный ( Black ); 1 - синий ( Blue );
2 - красный ( Red ); 3 - фиолетовый ( Magenta ); 4 - зеленый
( Green ); 5 - голубой ( Cyan ); 6 - зеленый ( Yellow ); 7 -
белый ( White ); эти мнемоники определены в файле DEVICE.H.
+ ESC+k Включение цветового сопровождения вывода символов
+ ESC+l Выключение цветового сопровождения вывода симво-
лов. Символ при этом выводится в той палитре,
которая была установлена для этого знакоместа
ранее.
* ESC+P+(палитра)
Установка глобальной палитры. На всем экране,
независимо от того, включен ли цвет, устанавли-
вается соответствующая палитра.
.OUTCHAR ESC .OUTCHAR 'P'
.OUTCHAR 8*black+white
-стандартная палитра(белый по черному)
+ ESC+b Установка глобальной палитры. Действует анало-
гично предыдущей функции, но на каждую строку
растра знакоместа устанавливается своя палитра
( при этом наборы палитр для разных знакомест
совпадают ). Указатель на вектор из восьми па-
литр передается в HL во ВРЕМЯ ПЕРЕДАЧИ СИМВОЛА
'b' ( первая палитра соответствует верхней стро-
ке растра ).
.OUTCHAR ESC
LD HL,PALLETS - желтые символы на фоне :
.OUTCHAR 'b' красном в верхней поло-
PALLETS: вине символа, синем - в
REPT 4 нижней
DB 8*red+yellow
ENDM
REPT 4
DB 8*blue+yellow
ENDM
* ESC+V+(палитра/инверсия)
В режиме выключенного цвета младший бит третьего
байта последовательности определяет, будут ли
последующие символы выводиться с инверсией(D0=1)
или без ( D0=0 ). При включенном цвете этот байт
определяет локальную палитру ( палитру вывода
последующих символов ).
+ ESC+d+(инверсия)
Включение инверсии. Работает аналогично предыду-
щей в режиме выключенного цвета, но данная по-
следовательность сработает на включение/выключе-
ние инверсии и в режиме включенного цвета.
.OUTCHAR ESC .OUTCHAR 'P'
.OUTCHAR 8*black+white - глобальная палитра
.OUTCHAR ESC .OUTCHAR 'k'
.OUTCHAR ESC .OUTCHAR 'V'
.OUTCHAR red*8+green - локальная палитра
.OUTCHAR 'H' - зеленая буква на красном фоне
.OUTCHAR ESC .OUTCHAR 'l'
.OUTCHAR 'J' - белая буква на черном фоне
.OUTCHAR ESC .OUTCHAR 'V'
.OUTCHAR 1
.OUTCHAR 'K' - черная буква на белом фоне
.OUTCHAR ESC .OUTCHAR 'k'
.OUTCHAR ESC .OUTCHAR 'd'
.OUTCHAR 1
.OUTCHAR 'L' - красная буква на зеленом фоне
+ ESC+c Установка локальной палитры. Работает независимо
от того, включен ли цвет ( но пока он выключен,
локальная палитра будет игнорироваться ). На
каждую строку растра знакоместа задается своя
палитра. Указатель на вектор из восьми палитр
передается HL во ВРЕМЯ ПЕРЕДАЧИ СИМВОЛА 'c'
( первая палитра соответствует верхней строке
растра ).
.OUTCHAR ESC
LD HL,PALLETS - желтые символы на фоне :
.OUTCHAR 'c' красном в верхней поло-
PALLETS: вине символа, синем - в
REPT 4 нижней
DB 8*red+yellow
ENDM
REPT 4
DB 8*blue+yellow
ENDM
+ ESC+v Расцвечивание экрана. Независимо от того, вклю-
чен ли цвет, расцвечивает прямоугольный участок
экрана согласно указанной палитре. Параметры
передаются с адреса 80H:
ORG 80H
DB позиция, строка верхнего левого угла
DB длина, ширина прямоугольника в знакоместах
DB палитра
При вызове параметры портятся.
LD HL,PARAMS - бело - красная палитра в
LD DE,80H верхней левой четверти
LD BC,5 экрана
LDIR
.OUTCHAR ESC .OUTCHAR 'v'
PARAMS:
DB 0,0,32,15,red*8+white
+ ESC+e+(цвет)
Установка цвета бордюра.
.OUTCHAR ESC .OUTCHAR 'e' .OUTCHAR green
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Пиктограммы
+ ESC+i Нарисовать пиктограмму. Сама пиктограмма описы-
вается с адреса 80H :
ORG 80H
DB позиция , строка верхнего левого угла
DB длина , ширина пиктограммы в знакоместах
DW указатель на битовую карту точек
DW указатель на байтовую карту палитр
При вызове параметры портятся. Структура карт:
знакоместа описываются последовательно, слева
направо, строки - сверху вниз. Описание одного
знакоместа в битовой карте - 8 байт, по байту на
строку растра, аналогично и в карте палитр.
LD HL,ICON - желтая стрелка на
LD DE,80H красном поле
LD BC,8
LDIR
.OUTCHAR ESC .OUTCHAR 'i'
ICON:
DB 3,7 - позиция ( 7,3 )
DB 2,1 - размеры 1х2
DW POINTS
DW PALLETS
POINTS:
DB 0,0,0,0FH,0FH,0,0,0
DB 0,40H,60H,0F0H,0F0H,60H,40H,0
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
; ╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
PALLETS:
REPT 16
DB 8*red+yellow
ENDM
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Разное
01H ^A GRF Печать следующего символа как псевдографику,даже
если его код меньше,чем 20H.Кодировка символов с
кодом 0..1FH совпадает с кодировкой IBM ALT, на
печать остальных символов ^A не влияет.
.OUTCHAR 1
.OUTCHAR 3 печать сердечка
.OUTCHAR 1
.OUTCHAR 'S' печать S
07H ^G BEL Звуковой сигнал тона 18 длительностью 21 ( в
относительных единицах ).
.OUTCHAR 7 эквивалентно .BEEP 18,21
+ ESC+j Печать строки. Сама строка помещается с адреса
81H, количество символов в строке - с адреса 80H
LD HL,STRING
LD DE,80H
LD C,(HL)
LD B,0
INC BC
LDIR
.OUTCHAR ESC
.OUTCHAR 'j'
STRING: DB 17,'Concurrent BIOS',CR,LF
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Инициализация драйвера
Работа драйвера управляется блоком параметов, в который вхо-
дят: глобальная и локальная палитра, битовая карта курсора
( по восемь байт ), тип курсора, режим цветности, цвет бор-
дюра, кодировка, наличие инверсии. На самом деле таких бло-
ков два, временный и системный. Все изменения, произведенные
с помощью описанных ранее функций изменяют только временный
блок, и именно он управляет текущим выводом. Системный блок
нужен для реинициализации драйвера при выходе из программы.
* ESC+F Временный блок параметров становится системным.
* ESC+G Системный блок параметров становится временным,
в соответствии с ним производится реинициализа-
ция драйвера ( установка палитр, типа и формы
курсора, кодировки и т.д. ). Именно эта команда
подается DOSом при каждом выходе из программы
прежде чем напечатать промпт A>.
+ ESC+f Подавить один последующий вызов ESC+G. Это может
понадобится, например, при последовательном вы-
зове двух программ, когда первая ( например,
утилита COLOR ) расцвечивает экран для работы
второй. При этом первая, прежде чем закончит
свою работу, должна дать эту команду; иначе в
промежутке между их исполнением DOS успеет вы-
дать ESC+G для сброса консоли, что приведет к
его обесцвечиванию ( точнее, его расцвечиванию
согласно текущей глобальной палитре), а это было
бы неприятно.
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Исключенные функции
- ESC+E Сброс консоли. Легко заменяется последователь-
ностью CLS, ESC+G
- ESC+N Переход на 32-символьную консоль
- ESC+O Переход на 64-символьную консоль
- ESC+U Печать версии драйвера
- ESC+s Отображение фона экрана
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[свернуть]