DRV.COM, DRV7.COM - OS-DOS V3.60 Орион-128, CP/M-80

DRV.COM, DRV7.COM - драйвера обслуживания дисплея и клавиатуры, OS DOS V3.60, CP/M-80 Орион Софт

Продаю платы и наборы микросхем, куплю микросхемы Купить программы, микросхемы, готовые блоки запчастей ПК Орион-128

Все версии CP/M-80

Все версии ORDOS

 Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем.  Читайте про пакет Атлас. Также дискеты можно отформатировать из под ORDOS пакетом программ Атлас.

Дискеты должны быть отформатированы в OS DOS (CP/M-80) программой FORMAT.COM и на дискету записана система OS DOS V3.60  программой SYS.COM или SG360.COM

Как устроен BOOT-сектор (и что это такое), как пользоваться функциями BDOS и векторов BIOS читаем далее...

Руководство системного программиста OS DOS ORION-SOFT

Драйвера обслуживания дисплея и клавиатуры DRV.COM, DRV7.COM   ORION SOFT  1995 relise 3.60

Как Вам должно быть уже известно (см. файл OSDOS.TXT), для придания операционной системе гибкости в использовании в OS-DOS V3.60 применена система подключения внешних драйверов. С новой ОС Вы, конечно, сможете работать как и раньше (если при загрузке удерживать клавишу, обработка файла AUTOEXEC.BAT не проводится, а следовательно, не грузятся и драйверы), но данная версия OS-DOS рассчитана в первую очередь на работу с загруженными при холодном старте (а можно и после) драйверами. Под минимальным набором драйверов для работы понимаются два - дисплея и клавиатуры, причем они, как правило, совмещаются в один из-за совместного управления курсором. На дистрибутивной дискете OS-DOS прилагаются два таких драйвера - DRV.COM и DRV7.COM . Это описание, рассчитанное как на пользователей, так и на программистов, желающих использовать возможности драйверов при написании своих программ в OS-DOS. Данное описание подробно описывает тонкости работы с драйверами.

Расширение символьного экрана с 384 точек до 400 под CP/M-80

Итак, при запуске OS-DOS с помощью файла AUTOEXEC.BAT система загружает указанный в этом файле драйвер для дальнейшей работы. Что же при этом происходит ? Найдя на загрузочном диске указанный файл-драйвер, система загружает его в память первой страницы с адреса 100H (как обычный .COM-файл) и передает ему управление. Драйвер же перегружает основную (резидентную) свою часть из первой страницы в нулевую (в область с 8000H до 0B3FFH, зарезервированную для драйверов, причем память с 9000H до 0AFFFH отведена для драйвера клавиатуры и дисплея) и изменяет нужные вектора переходов в служебной области OS-DOS (0F300H-0F3FFH) на себя. При этом вначале, при загрузке системы, вектора указывают на заглушки (RET) или на соответствующие подпрограммы системного Монитора (для ввода с клавиатуры и вывода на экран), т.е. до загрузки внешнего драйвера его функции выполняются Монитором в силу возможностей последнего. После инициализациии драйвера вызов функций Монитора переопределены на находящийся в нулевой странице драйвер и дальнейшая работа будет происходить только через него.

Такой подход крайне удобен для работы в OS-DOS, т.к. позволяет оперативно, по мере надобности, подгружать тот или иной драйвер, меняя тем самым характеристики консоли (клавиатура+экран), подключать драйвер принтера или вообще какого-либо нестандартного устройства ввода-вывода (мышь и т.д.).
При этом основной эффект заключается в том, что внутренний драйвер, в рамках BIOS, не может быть настолько многофункциональным и быстро сменяемым, как внешний, "неограниченный" в размере и свободно подменяющийся другим. Итак, почему же необходимо загружать драйвер, если его функции могут быть выполнены Монитором ? Дело в том, что из-за небольшого размера в 2Кб внутренние подпрограммы Монитора крайне упрощены и предназначены для работы в ORDOS, где вполне достаточно (для 90% применений, исключая редактирование текстов) иметь кодировку КОИ-7H0/1 и 64 символа в строке. Но все это непригодно для работы в операционной системе намного более высокого уровня, т.е. в OS-DOS, где требуется не менее 80 символов в строке при выводе на экран и полноценная восьмибитная кодировка для нормальной работы с программами. Это и обеспечивает внешний загружаемый драйвер. Мало того, для работы с прикладными пакетами в OS-DOS драйвер должен эмулировать т.н. ТЕРМИНАЛ, причем желательно один из стандартных. Ранее (лет 20 назад) на CP/M (и других) компьютерах терминалом назывался совмещенный (как правило) блок клавиатуры и дисплея, работающий автономно от основного компьютера и соединявшийся с ним лишь по каналу связи. Управлялся терминал специальными управляющими кодами. Поданный на терминал код печатного символа аппаратными средствами этого устройства выводился на экран, а управляющие коды позволяли переключать режимы работы, способы вывода символа, манипулировали содержимым экрана (конечно, все терминалы были текстовыми, поэтому CP/M не поддерживает управление цветом и графикой - она на это и не рассчитана). Ныне, когда фактически дисплеи только выводят изображение, полностью формируемое в компьютере программно, можно говорить, лишь о программной эмуляции терминала. Так вот, понятие терминала в CP/M очень важно, т.к. для полноценного использования возможностей программы она обычно настраивается на работу с конкретным типом терминала (с помощью программы-инсталятора), а драйвер должен этот терминал эмулировать. Так, например, тот же системный Монитор частично эмулирует несколько функций терминала DEC VT-52 (название говорит о том, что разработчик терминала - фирма DEC, название - VT-52), но этого недостаточно для работы программ (особенно из старого наследия) в OS-DOS, тогда как в ORDOS практически не используется.

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

DRV.COM - кодировка КОИ-8 с символами псевдографики по ГОСТу и альтернативная кодировка IBM PC.

DRV7.COM - кодировка КОИ-7H0/1 с возможностью вывода псевдографики, а также русских символов в кодировке КОИ-8.

При этом оба драйвера осуществляют вывод в режиме 80 символов в строке шрифтом "микротекст" (размер матрицы символа 5x10 точек, для сравнения в системном Мониторе - 6x10 точек). При старте автоматически определяет тип подключенной клавиатуры: РК-86 или МС7007 (по авторскому варианту подключения см. журнал "Радио" 2/91).

Загрузка драйверов:

Драйвер может быть загружен в любой момент работы в OS-DOS путем непосредственного запуска файла. Для загрузки DRV7.COM параметры не требуются, тогда как для DRV.COM параметром следует задать необходимую кодировку, в которой будет работать драйвер после загрузки (КОИ-8 или альтернативка). Параметр задается в командной строке OS-DOS через символ "/" (слеш) одним цифровым символом: 0 - для альтернативной кодировки и 8 - для кодировки КОИ-8.

Примеры:

DRV /0 - для альтернативной кодировки
DRV /8 - для КОИ-8

Если указанный после "слеша" символ не "0" или "8", то будет включена кодировка КОИ-8. Кроме того, если командная строка не задана, драйвер выведет запрос (после заголовка) на указание типа требуемой кодировки. Здесь также следует ввести символ "0" для альтернативки и "8" или ВК для КОИ-8.
Для работы в системе OS-DOS V3.60 необходимо,чтобы при холодном старте один из драйверов загружался автоматически, т.е. с помощью файла AUTOEXEC.BAT, как это и сделано на дистрибутивном диске. Тогда сразу после старта все будет готово для полноценной работы.

Использование драйверов:

DRV.COM - основной драйвер для работы с программами в кодировке КОИ-8, которая широко распространилась в нашей стране из-за ее применения в промышленных компьютерах, в особенности где устанавливалась CP/M-80 или ее аналог MicroDos. Поэтому на сегодняшний момент имеется довольно много программного обеспечения в CP/M, рассчитанного на работу именно в этой кодировке (как правило отечественных авторов и переводы фирменных программ). Несмотря на то, что кодировка КОИ-8 не перспективна в применении, она используется нами, как дань сложившейся традиции. Поэтому на дистрибутивной дискете все программы с русскоязычным выводом и текстовые  описания также приведены в этой кодировке. Драйвер DRV.COM позволяет вводить с клавиатуры и выводить на экран строчные и прописные символы русского и латинского алфавитов в кодировке КОИ-8, а также выводить псевдографические символы (для построения рамок). Этот драйвер, как и DRV7.COM, эмулирует CP/M-терминал DEC VT-52 (25 строк, 80 символов), описание управляющих кодов которого дано ниже (в конце файла).
При запуске DRV.COM с ключом "/0" драйвер будет выполнять те же функции, но весь ввод/вывод символов происходит в альтернативной кодировке, что позволяет просматривать и редактировать тексты (без дополнительных перекодировок) подготовленные на IBM PC.

DRV7.COM - драйвер несколько отличается от предыдущего, т.к. предназначен специально для запуска старого ПО для Ориона-128 в кодировке КОИ-7, проcмотра текстов и работы с программами для семибитной кодировки (а такие довольно распространены, особенно с компьютера "Роботрон-1715" и аналогичных моделей с операционной системой CP/M и SCP). При этом драйвер выводит псевдографику и сами символы русского алфавита в кодировке КОИ-8, т.е. его работа для верхней половины знакогенератора с кодами символов от 80H до 0FFH аналогична DRV.COM (в КОИ-8), а для нижней половины - по стандарту КОИ-7H0/1. Драйвер DRV7.COM символ 7FH воспринимает как триггер переключения инверсии, что необходимо для совместимости со старым программным обеспечением. Отметим, что драйвер DRV.COM для переключения инверсного/прямого вывода использует специальные управляющие коды терминала DEC VT-52 (см. в конце файла).

Несколько слов о вводе символов с клавиатуры. Если для драйвера DRV7.COM переключение РУС/LAT осуществляется как обычно, т.е. однократным нажатием на клавишу РУС/LAT, то для другого драйвера это все несколько сложнее из-за наличия восьмибитной кодировки, т.к. кроме переключения РУС/LAT необходимо еще и переключение CAPS LOCK, т.е. фиксация нижнего или верхнего регистров
символов при вводе. Здесь все зависит от того, какая у Вас подключена клавиатура, тип которой драйвер определяет при загрузке и сообщает об этом в последней строке своей заставки. Если клавиатура МС7007 - переключение CAPS LOCK выполняется так, как и в KEYALT$ от ORDOS, т.е. нажатием клавиши [КОМ] (не пытайтесь нажимать ее аналог для программы KEYALT$ - клавиши Ctrl+Ч). Но если определена клавиатура РК-86, то для переключения РУС/LAT и CAPS LOCK используется всегда одна и та же клавиша - РУС/LAT, причем при первом нажатии на эту клавишу драйвер отреагирует прерывистым сигналом из динамика, который будет генерироваться до тех пор, пока Вы не нажмете на какую-либо символьную клавишу. Если это будет опять клавиша РУС/LAT (т.е. эта клавиша будет нажата два раза подряд) произойдет переключение алфавитов, т.е. РУС/LAT, а вот если это будет любая другая клавиша - произойдет переключение CAPS LOCK, т.е. переключение регистров, а алфавит останется прежний. Столь сложная на первый взгляд система объясняется просто. Дело в том,  что в матрице клавиатуры РК-86 не предусмотрены дополнительные к основным служебные клавиши (кроме общепринятых F1-F5, ПС, СТР, ESC, HOME), коды которых дублировали бы комбинации Ctrl+?, но при этом находились бы в матрице отдельно. Использовать какие-либо комбинации Ctrl+? для такого переключения нельзя, поскольку код переключающей клавиши не передается в программу, обрабатывается в драйвере, и есть возможность возникновения ситуации, когда программа требует для какого-либо действия нажать клавишу Ctrl+? , а она у Вас занята на переключение CAPS LOCK (знак "?" использован для обозначения любой символьной клавиши).
Кроме этого, у Вас может возникнуть проблема с автоповтором, если Вы недостаточно быстро работаете с клавиатурой. Она решается довольно просто. В теле драйверов DRVX.COM имеются две служебные ячейки, содержащие константы, определяющие работу автоповтора. Для удобства их нахождения и оперативного изменения они вынесены в самое начало файла, а именно:

0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0100: C3 XX XX 70 00 21 00 XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
0110: XX .. ..

Здесь приведен дамп участка памяти с адреса 0100H в момент загрузки любого из драйверов DRV.COM (т.е. начальные байты файла). Значком 'X' отмечены байты, содержимое которых в данном случае значения не имеет. Интересующие нас байты находятся по адресу 0103H - это байт 70H (по умолчанию) и 0104H - байт 00H. Байт 70H по адресу 0103H определяет задержку от момента нажатия на клавишу до начала автоповтора и может быть как увеличен или уменьшен, соответственно будет увеличиваться или уменьшаться требуемая задержка. Байт 00H по адресу 0104H определяет скорость автоповтора и имеет смысл только при работе с программами, опрашивающими клавиатуру через STATUS. По умолчанию его значение 00H определяет самую высокую скорость автоповтора. Значение байта может находиться в пределах от 0 до 7FH, причем призначении 7FH скорость автоповтора около 1 символа в секунду. Ориентируясь на это, можно подобрать приемлемое значение этой константы (обычно не более 20H). Значение константы по адресу 0104H не должно превышать 7FH.

Ограничения при работе с этими драйверами:

Несмотря на очевидные преимущества при использовании внешних драйверов, их применение полезно и просто необходимо только лишь в том случае, когда Вы серьезно работаете или собираетесь работать в CP/M-среде (собственно для такого применения и были созданы данные драйвера). В случае же использования CP/M лишь как замену магнитофону для хранения файлов ORDOS на дискетах, надобность вообще в каких-либо драйверах отпадает сама собой. Тем не менее следует знать, что программы, написанные специально для Ориона, и использующие его графические, цветовые возможности и/или просто обращающиеся к точкам входа системного Монитора для ввода/вывода 0F803H и 0F809H, могут попросту повиснуть или непредсказуемо сработать, т.к. при загруженном драйвере эти точки входа Монитора переопределены. Однако таких программ известно на данный момент довольно мало (не более десятка) и для работы с ними
достаточно исключить загрузку драйвера, удерживая любую символьную клавишу для пропуска обработки файла AUTOEXEC.BAT.

Также возможна еще одна ситуация, когда программа, используя для работы нулевую страницу, пусть и не обращаясь к указанным точкам входа Монитора, затерла драйвер в ОЗУ своим телом или данными. Тогда по выходу из нее обратно в OS-DOS (если такой выход предусмотрен) также возможно зависание или искажение символов из-за порчи знакогенератора. Аналогичный эффект будет, если программа испортит область 0F320H-0F372H и не восстановит ее по окончанию работы. К таким программам можно отнести оболочку Bridge Panels оригинальной версии 1.2 (в отличие от доработанной версии 1.32 на дистрибутивной дискете OS-DOS).

Особо можно остановиться на редакторе Master Editor (MED.COM). Этот редактор можно отнести к весьма корректной программе, т.к. в нем предусмотрено сохранение области 0F300H и самого драйвера, но, поскольку применявшийся в "Орион-Сервисе" драйвер КОИ-8 был до предела убогим, он занимал всего 2Кб и, соответственно, Master Editor сохраняет в нулевой странице только 2Кб с адреса 9000H, в то время как драйвера для OS-DOS занимают немногим более четырех Кб, т.е. в два с лишним раза больше. Поэтому при обработке больших текстов в этом редакторе (более 30Кб) часть драйвера, а именно знакогенератор, затирается и при выходе из редактора вместо символов будет выводиться "грязь", хотя зависания не будет. При этом для восстановления нормального вывода символов достаточно запустить драйвер еще раз.

И последняя тонкость в работе драйверов. Для их полноценного использования на обычном Орионе не хватает экранной области. Судите сами, для вывода 80 символов в строке при, ширине каждого символа 5 точек, требуется 80x5=400 точек по горизонтали, тогда как у Ориона их всего 384, т.е. на экран умещаются только первые 77 символов от левого края. Это в общем-то не очень существенно, поскольку последние 3 позиции экрана редко используются для вывода туда информации. Для расширения экранной области на 16 точек вправо, т.е.  до 400 точек по горизонтали. При этом экранная область занимает пространство от 0C000H до 0F1FFH, что на полкилобайта больше прежней. Сама доработка крайне проста и доступна. Вам потребуется 3 провода и 1 ИМС
155/1533ТМ2, из двух триггеров которой используется только один. Кроме того, на плате компьютера следует перерезать проводник от 2 вывода МС DD13.1 к 45-й шине. Остальное выполняется по ниже приведеной схеме (разработка SP-Computer Club, Санкт-Петербург):

Драйвер DRV.COM DRV7.COM клавиатуры и дисплея OS DOS V360  Схема и плата здесь

Собрав эту схему, Вы получите экран на 400 точек. Если же необходимо иметь оба экрана и на 384 и на 400 точек, можно поставить переключатель (центральный контакт на DD13.1/2, оставшиеся - на выход дополнительного триггера ТМ2 и в 45-ю шину).  Читать подробнее здесь как собирать схему!!!!

Управляющие коды драйверов DRVx.COM

(Терминал DEC VT-52)

07H - звуковой сигнал
08H - курсор влево
18H - курсор вправо
19H - курсор вверх
1AH - курсор вниз
09H - горизонтальная табуляция через 8
0CH - CLS+HOME (очистка экрана и установка курсора в левый верхний угол)
1FH - CLS+HOME
7FH - включить/выключить инверсный вывод (только для DRV7.COM)

ESC,36H - включить инверсный вывод
ESC,37H - выключить инверсный вывод
ESC,3AH - включить курсор
ESC,3BH - выключить курсор
ESC,3CH - включить автоперевод при выводе в последнюю позицию строки
ESC,3DH - выключить автоперевод строки при выводе в последнюю позицию
ESC,4EH - получить текущую позицию курсора с клавиатуры в виде ESC,Y,LN,COL
ESC,Y,LN,COL - прямое позиционирование курсора (LN=LINE+20H, COL=COLUMN+20H)
ESC,45H - CLS+HOME (аналог 0CH, 1FH)
ESC,48H - HOME (без очистки экрана)
ESC,4AH - стирание до конца экрана (включая позицию курсора)
ESC,4BH - стирание до конца строки (включая позицию курсора)
ESC,4CH - вставить строку, остальные строки смещаются вниз
ESC,4DH - удалить строку, остальные строки смещаются вверх
ESC,52H,BYTE - установить форму (толщину) курсора. Значение BYTE от 1 до 8.

    

Купить платы, готовые блоки, наборы микросхем, прошитые ПЗУ, микропроцессоры на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу