Voyager #03
19 октября 1998
  Софт  
  Profi  

PROFI CLUB - Изучаем CP/M (совместимость, процессоры, терминалы).

<b>PROFI CLUB</b> - Изучаем CP/M (совместимость, процессоры, терминалы).
(C) Чертков В.Ю. 
Music: BURATINO remixed by KENOTRON 
───────────────────────────────────────────────────


           ╔═══════════════════╗ 
           ║                ║ 
           ║  ИЗУЧАЕМ CP/M  ║ 
           ║     часть 1     ║ 
           ║                ║ 
           ╚═══════════════════╝ 



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


                 *  *  * 


  1. Введение 
  ▀▀▀▀▀▀▀▀▀ 
    Первый универсальный микропроцессор 4004 фир-
мы Intel появился в 1971 году. Он мог выполнять лю-
бую программу, написанную в системе своих команд,
мог ввести данные, обработать их и вывести резуль-
таты. Длина слова этого микропроцессора составляла
всего 4 бита (тетрада). Микропроцессор содержал око-
ло 1000 транзисторов, выполнял 8000 операций в се-
кунду и был ориентирован на применение в калькуля-
торах. 
     Через год фирма Intel выпустила микропроцес-
сор 8008 - аналог 4004 с длиной слова 8 бит и бо-
лее быстродействующий. Но поистине эпохальным был
выпуск микропроцессора 8080 - можно сказать, с не-
го все и началось. Этот МП был представлен на ры-
нок в начале 1974 г. и сразу привлек к себе внима-
ние, т.к. был достаточно мощным для построения не-
большого компьютера. В последствии Intel выпустила
целый комплект микросхем, на основе которого мож-
но создавать различные микропроцессорные системы.
Некоторые из этих БИС применяются и сейчас. 
     Чуть позднее в продаже появились, как конст-
рукторы для сборки своими руками, так и готовые
компьютеры на основе МП i8080. Никакой операцион-
ной системы для них, конечно же, не существовало,
для управления компьютером применялись специальные
программы, названные за выполняемые ими функции
мониторами. Монитор позволял просматривать и изме-
нять содержимое ячеек памяти, заполнять память кон-
стантой, запускать программы и др. Также мониторы
позволяли выгружать блоки памяти на внешний носи-
тель (перфоленты, магнитофонные кассеты) и загру-
жать их, в случае надобности, обратно в ОЗУ. Прог-
рамма монитора обычно зашивалась в ПЗУ и получа-
ла управление сразу после включения питания компью-
тера, что было удобно для пользователя. 
     Мониторы также включали в себя набор часто
используемых процедур, таких, как ввод байта с кла-
виатуры, вывода символа на терминал или принтер
(телетайп) и других. Это объясняется тем, что любая
более-менее сложная программа использует эти функ-
ции. Т.к. они подобны соответствующим фрагментам
других программ, то, чтобы не повторять одни и те
же процедуры в каждой программе, их разместили в
мониторе. Преимущество состоит и в том, что теперь
для создания программы тратится меньше времени и
экономится место в ОЗУ. Процедуры располагались по
определенным адресам и были доступны любой прог-
рамме. Это, по сути, явилось зародышем операцион-
ной системы. 
     Появление в середине 70-х годов на рынке пер-
сональных ЭВМ с внешней памятью на магнитных дис-
ках повлияло на эволюцию операционных систем. Имея
быстрый доступ к любой точке диска и обладая не-
достижимой для магнитофона скоростью обмена данны-
ми, дисковод позволил применить качественно новый
способ упорядоченного хранения данных на внешних
носителях. Возникла необходимость создать операци-
онную систему, эффективно управляющую данными на
внешних носителях (управляющую файлами на дисках).
При работе на ПЭВМ пользователю приходится часто
запускать разнообразные программы, которые, к тому
же, должны обмениваться между собой данными. Поми-
мо этого, необходимо решать еще определенный круг
задач: разметка дисков, копирование и удаление фай-
лов, распечатка их на принтере или графопостроите-
ле, организация локальной сети и многое другое. Оп-
тимальным решением явилось то, что все вышепере-
численное "брала на себя" операционная система -
сложная программа (а вернее, комплекс программ), уп-
равляющая ресурсами компьютера. 
     Т.к. главная задача ОС - эффективно управлять
компьютером, то это она делает самым лучшим обра-
зом, а программы, входящие в состав ОС - наиболее
совершенны. Если бы это было не так, то какой во-
обще смысл в ОС? 


     В 1975 г. Гарри Килдел создал операционную
систему CP/M для компьютеров, построенных на базе
МП i8080 и поддерживающих работу с дисководом.
Система выпускалась фирмой Digital Research. Назва-
ние системы означает Control Program for Microcom-
puters (управляющая программа для микрокомпьютеров).
Операционная система представляла собой программу,
которая управляла ресурсами машины, такими, как
внешняя память (файловые структуры), клавиатура,
терминал, принтеры, последовательный канал и др.
Для работы система требовала около 5К ОЗУ, все
остальное предоставлялось программам. Формой обще-
ния оператора с системой был диалог, т.е. оператор
вводил команды - в виде строки, в которой первым
словом была собственно команда, а все остальное -
параметры этой команды. Результат выводился на тер-
минал (ранее телетайп или принтер), а система, в
свою очередь, могла запросить какие-либо параметры
у оператора. Через год была выпущена вторая версия
и чуть позднее V2.2, ставшая фактически стандартом
на ОС для 8-битных ПЭВМ. У нас распространены под
различными названиями варианты именно этой систе-
мы. Версия 3.0 поддерживала реальное время, работа-
ла с секторами большого размера (1024 байта) и бы-
ла ориентирована уже на процессор 64180. Система
требовала как минимум 128К RAM. Четвертая версия
поддерживала многозадачность - это так называемая
система MP/M. Сведений об этой системе крайне ма-
ло, и найти какие-либо описания (не то что техни-
ческое руководство, даже просто руководство пользо-
вателя) не представляется возможным. 
     Для удобства установки на компьютере произ-
вольной конфигурации операционная система была по-
делена на две части - собственно дисковую операци-
онную систему (BDOS - Basic Disk Operating System)
и систему ввода/вывода (BIOS - Basic Input/Output
System). Модуль BDOS представляет из себя ядро опе-
рационной системы, реализующее "логический" уровень
ввода/вывода: поддержка логических устройств, учет
и распределение дискового пространства, консольный
ввод-вывод, поддержка файлов. Можно даже сказать,
что поддержка файлов является основной задачей BDOS,
и она предоставляет для этого много возможностей.
     Модуль BIOS, напротив, содержит лишь простей-
шие функции управления внешними устройствами. В об-
щем, BIOS представляет из себя набор программ для
обслуживания основных устройств компьютера, таких,
как: клавиатура, экран, принтер, дисковые устройства
и пр. Драйверы устройств осуществляют выполнение
лишь простейших функций. Например, BIOS может чи-
тать отдельные сектора диска, но организация дан-
ных в файлы здесь отсутствует. Система BIOS и
драйверы устройств образуют "физический" уровень
операционной системы. 
     Первая часть (BDOS) могла быть перенесена на
любой компьютер с подходящим процессором без из-
менений. Небходимым требованием являлось только на-
личие ОЗУ в младших адресах памяти, не занятого
видеобуферами, т.е. "чистого" ОЗУ, где бы выполня-
лись программы и располагалась сама ОС. Также для
работы системы необходимо было иметь хотя бы од-
но дисковое устройство (это может быть дисковод
или винчестер). Все операции ввода/вывода BDOS осу-
ществляет посредством вызова системы BIOS, таким
образом достигается высокая мобильность как самой
CP/M, так и программ работающий под ее управлени-
ем. Программы гораздо менее зависимы от аппаратуры.
В BDOS'е содержался еше один компонент ОС - CCP
(Console Command Processor) - процессор консольных
команд или попросту интерпретатор командных строк.
Это небольшая программа, которая автоматически за-
пускается после рестарта системы. Она осуществляет
прием и выполнение команд пользователя. По сути -
это обычная прикладная программа, но без нее рабо-
та совершенно невозможна - это первичная оболочка.
Диалог с оператором ведет именно CCP, BDOS же -
это просто набор функций и не более того. 
     Вторая часть системы (BIOS) - (небольшая и
относительно простая) специально программировалась
для каждой машины с учетом ее аппаратных особен-
ностей. Эту часть системы создавали сами произво-
дители ПК. Таким образом получается, что CP/M сов-
местима с большинством 8-ми разрядных компьютеров.
     Именно широкая совместимость системы, а так-
же ряд других особенностей, таких, например, как под-
держка транзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
 ранзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 





(C) Чертков В.Ю. 
Music: 'CROON' /13.10.98 (:-<>)/KENOTRON
───────────────────────────────────────────────────



            ╔═══════════════════╗ 
            ║                ║ 
            ║  ИЗУЧАЕМ CP/M  ║ 
            ║     часть 2    ║ 
            ║                ║ 
            ╚═══════════════════╝ 



  2. Совместимость 
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 


     Операционная система CP/M получила столь ши-
рокое распространение благодаря простоте установки
ее на компьютер произвольной конфигурации и боль-
шому количеству программного обеспечения, созданно-
го для этой системы. 
     Как и любая профессиональная ОС, CP/M обла-
дает замечательным свойством: компоненты системы
могут независимо совершенствоваться при сохранении
полной совместимости с ранее написанным ПО! Т.к.
система использует определенные соглашения, модули
имеют определенные точки входа. Программы осущес-
твляют вызов ОС строго определенным образом, за
счет этого достигается высокая мобильность и сов-
местимость. 
     Тут нужно отметить один момент. Все програм-
мы под CP/M можно разделить на два типа: те, ко-
торые работают только через стандартные средства
системы (BDOS & BIOS), и те, которые кроме ОС мо-
гут обращаться напрямую к аппаратуре компьютера.
Программы первого типа, как правило, работают на
любых компах, где работает CP/M. Если такая прог-
рамма "не идет", то это означает, что какой-то ком-
понент системы реализован неверно. Как правило, про-
граммы этого типа невзрачны на вид, не имеют окон-
но-менюшного интерфейса (тем более, пиктограмм) -
это своеобразная плата за универсальность и мобиль-
ность. Хотя еще в 1981 г. американский институт
стандартов (ANSI) разработал искейп последователь-
ности, позволяющие управлять цветом выводимых сим-
волов и формой курсора. Но программы под CP/M, ори-
ентированные на ANSI, мне встречались очень редко.
И все равно, с графикой они работать не позволяют...
     Программы второго типа, наоборот, красочны и
приятны на вид, т.к. полностью используют возмож-
ности аппаратуры. Они, можно сказать, написаны бо-
льшей частью не для CP/M, а для этого конкретного
компьютера. Раз программа обращается напрямую к
аппаратуре (использует команды IN/OUT или обраща-
ется напрямую к видео-памяти), то, конечно же, ра-
ботать она будет только на "родном" компьютере.
Перенести ее на другой ПК с другой архитектурой
довольно сложно или совсем невозможно. Т.е., програм-
ма привязана к аппаратуре. Таково, например, боль-
шинство программ на Профи. На других CP/M-машинах
они не пойдут, т.к. используются аппаратные возмож-
ности конкретного компьютера. 
     Из всего сказанного следует вывод, что при
написании программы под управлением системы CP/M
вас никто не заставляет, например, для вывода тек-
ста на экран, работать исключительно через BDOS.
Если вы не предполагаете переносить эту программу
на другие ПК, то смело можно писать свои собствен-
ные процедуры работы с экраном и клавиатурой. Дру-
гое дело, если стандартные функции вас полностью
устраивают, то можно работать и через них. Т.е., у
программиста есть выбор (а программируя на Спект-
руме - нет): или использовать стандартные функции,
или писать свои. Или можно создать специальную сис-
тему, расширяющую возможности экранного ввода/вы-
вода - это своего рода дополнение операционной сис-
темы, я имею в виду резидентную библиотеку окон
Windows на Профи. Так же, как и с CP/M: гораздо
удобнее один раз написать функции и собрать их в
модуле, чем каждый раз воссоздавать их в очередной
программе. Да и резидент этот можно совершенство-
вать (или, к примеру, появится какое-либо устройст-
во типа графического акселератора - достаточно бу-
дет только изменить несколько процедур в резиден-
те - и все хоккей!), при этом будут лучше работать
программы, написанные под него! Программы-же, не ори-
ентированные под эту библиотеку, улучшений аппара-
туры не заметят. 
     Под CP/M создана приличная база программ. Где
все это ПО - другой вопрос. Дело все в том, что по-
пулярность этой системы пришлась на конец 70-х -
начало 80-х годов, а в то время, сами понимаете,
ПК у нас совсем не выпускались. Из ПЭВМ наиболее
были распространены Robotron 1715, импортируемые
из ГДР. Обычному человеку все это было практичес-
ки недоступно, т.е., массового распространения прог-
рамм, как сейчас, не было. Да и программы были толь-
ко те, которые могли работать на этих компьютерах
(версия системы не старше CP/M 2.2, процессор, в
лучшем случае, Z-80, а вообще - i8080). Все, что
было - это то, что использовалось в институтах и
на некоторых предприятиях: электронные таблицы
SuperCalc, MultiPlan, СУБД dBASE II, да несколько
текстовых редакторов типа Word Star, Final Word
или Refor + некоторые языки программирования. И это
все! Отрицательным фактором явилось и то, что к
концу 80-х годов предприятия стали закупать IBM-
совместимую технику, а от CP/M старались избавить-
ся. В результате, сейчас от фирменного ПО остались
одни обломки, осколки и обрывки. То, что еще оста-
лось, переделано уже по многу раз (как это было на-
писано - "одну и ту же программу по очереди пере-
делывают несколько дебилов"), были даже целые инс-
титуты, занимавшиеся полным переводом западных
программ на русский язык. Так что, игры для ZX-
Spectrum, которые пришли к нам из Польши, можно во-
обще считать фирменными! Чисто CP/M'овские прог-
раммы для Профи собраны с огромным трудом: что-то
нашли в одном месте , что-то - в другом - и, как
правило, все в ужасном состоянии. Единственно, как
мне кажется, где сейчас можно найти непокалеченные
программы под CP/M - это в посвященных CP/M сай-
тах (sites) в InterNET. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
 . 

(C) Чертков В.Ю. 
Music: THE BEST ITALIAN-'VENICE' by KENOTRON 
───────────────────────────────────────────────────



            ╔═══════════════════╗ 
            ║                ║ 
            ║  ИЗУЧАЕМ CP/M  ║ 
            ║     часть 3     ║ 
            ║                ║ 
            ╚═══════════════════╝ 



  3. Процессоры 
  ▀▀▀▀▀▀▀▀▀▀▀ 


     Как уже было сказано во введении, система
CP/M была написана для процессора i8080. Сразу же
возникает вопрос: "А почему, собственно, не для Z80?
Ведь он же лучше". Дело все в том, что фирма Zilog
выпустила свой процессор на два года позднее, чем
вышел i8080, а ПЭВМ на его основе, соответственно,
появились еще позже. Конечно, 2 года - небольшой
срок, но в компьютерной индустрии это целая веч-
ность. Впоследствии появились версии системы, ори-
ентированные и на Z80, которые требовали меньше
памяти и работали быстрее. 
     Кто опаздывает - тот проигрывает. Zilog и
впоследствии создавала БИС гораздо совершеннее во
всех отношениях, чем Intel'овские, но проигрывала во
времени. Intel выпускала чипы, на них создавались
компьютеры, формировались стандарты в технике и
пр., и уже после этого Zilog представляла свою раз-
работку - но время упущено и рынок уже захвачен. 


                 *  *  * 


    Теперь рассмотрим применявшиеся в ПЭВМ, рабо-
тающих под управлением системы CP/M микропроцес-
соры: 



i8080 
══════ 


     Можно сказать, первый нормальный микропроцес-
сор. Выполняет 68 базовых команд, имеет 6 режимов
адресации. Регистры 8/16 бит. Адресует 64К памяти.
Ширина шины данных 8 бит, шины адреса - 16 бит.
Выполнен по технологии КМОП. Тактовая частота 2.5
МГц. Корпус DIP с 40 выводами. Питание +5V, +12V
и -5V, сигналы синхронизации в противофазе и амп-
литудой 12V. Шины адреса и данных должны обязатель-
но (!!!) буферизироваться шинными формирователями.
Выполняет в среднем около 250 тыс. операций в се-
кунду. Один режим обработки прерываний. Нет команд
относительного перехода, один набор регистров. Как
с точки зрения программиста, так и с точки зрения
разработчика аппаратуры, процессор очень неудобный.
Хотя, если программа написана для этого процессора,
то она будет работать на любом другом процессоре
(из этого списка, разумеется). 


i8085 
══════ 


     Усовершенствованный i8080. Изменена главным
образом технология, теперь по схеме подключения МП
ближе к 16-битным. Однополярное питание +5В, все
выводы ТТЛ-совместимы. Тактовая частота 5Мгц. Име-
ет встроенный контроллер прерывний. По сравнению с
i8080 имеет всего две дополнительные команды (для
управления контроллером прерываний). В остальном -
полная совместимость с i8080. Выполняет в среднем
500 тыс. операций в секунду (0.5 mips). 



Z-80 
═════ 


     Несколько инженеров фирмы Intel, разрабатывая
i8080, не согласившись с руководством, вышли из ее
состава и организовали собственную компанию - Zilog.
В 1976 году выпускает свой вариант МП, по сравне-
нию с i8080, он имеет дополнительные регистры и
команды. Любая программа, написанная для i8080, бу-
дет работать и на Z80. Процессор состоит из 8500
транзисторов, выполняет 158 базовых команд, имеет
10 режимов адресации (появились префиксы CB, DD,
ED, FD). Регистры 8/16 бит, адресует 64К памяти.
Ширина шины данных 8 бит, шины адреса 16 бит. Вы-
полнен по технологии n-МОП. Тактовая частота 4Мгц.
Корпус DIP с 40 выводами. Один источник питания
+5V, все входы и выходы совместимы с TTL. На час-
тоте 4Мгц в среднем выполняет 400 тыс. операций
в секунду (не NOP'ов!). Развитая система прерываний,
два вида: маскируемые (INT) и немаскируемые (NMI).
Режим 0 маскируемых прерываний эквивлентен режиму
в i8080. Имеет возможность регенерировать динами-
ческое ОЗУ. Впоследствии выпускались варианты мик-
ропроцессора на 2.5 (Z80L), 6 (Z80B) и 8 (Z80H)
мегагерц. Совместимые микропроцессоры выпускают
множество фирм, есть даже варианты на 10 и 14 Мгц!
(т.е. до 1.4 mips) 
     К Z-80 можно подключать любые БИС из ком-
плекта i8080. 



64180, Z180 
════════════ 


     Дальнейшее развитие Z80. Адресует 1Мб памя-
ти, тактовая частота 10 Мгц. Ширина шины данных
8 бит, шины адреса - 20 бит. Корпус DIP с 64 вы-
водами или PLCC с 100 выводами. Имеет встроенный
диспетчер памяти. Память делится на страницы по
4К, подключаемые в два окна - с адреса 0 и с ад-
реса 8000h. Ширина регистров, как и у Z-80 - 8/16
бит. Значительно усовершенствована система преры-
ваний; встроенный контроллер прерываний. Добавлены
новые команды. По ошибочному коду операции отраба-
тывается рестарт 0. В среднем 1 млн. операций в
секунду (т.е., 1 mips). Выполняет все документирован-
ные команды Z-80. 


Новые команды: 
Команда тестирования проверяет - установлены ли в
рег. A указанные в маске биты (маска - операнд ко-
манды), отличие от команды BIT в том, что проверя-
ется сразу несколько битов. 
Команды IN0 и OUT0 предназначены для доступа к
встроенной в процессор периферии (порты 00..FF). 


   ED 00 NN  IN0   B,(NN)  ;NN-байт 
   ED 01 NN  OUT0  (NN),B 
   ED 04     TST   B     ;проверка битов 
                         ;(TEST A,B) 
   ED 08 NN  IN0   C,(NN) 
   ED 09 NN  OUT   (NN),C 
   ED 0C     TST   C 
   ED 64 NN  TST   NN 
   ED 74 NN  TSTIO NN     ;маска читается из 
                          ;порта NN 
    ...................... 



   ED 38 NN  IN0   A,(NN) 
   ED 39 NN  OUT0  (NN),A 
   ED 3C     TST   A 
   ED 4C     MLT   BC     ;BC=B*C 
   ED 5C     MLT   DE 
   ED 6C     MLT   HL 
   ED 7C     MLT   SP 
   ED 76     SLP          ;энерго-сберегающий
                          ;режим 
   ED 83     OTIM 
   ED 8B     OTDM 
   ED 93     OTIMR 
   ED 9B     OTDMR 



Z-280 
══════ 


     Адресует 16 Мб памяти, т.е. ширина шины адре-
са 24 бита. Тактовая частота (минимум) 25 Мгц. Ши-
рина шины данных 16 бит (вдвое большая производи-
тельность при той же тактовой частоте). Встроенный
диспетчер памяти, сегменты. Имеет конвейерную сис-
тему обработки команд, встроенную кэш память (КЭШ
1-го уровня) и возможность подключения математичес-
кого сопроцессора. В среднем 4.5 млн. операций в се-
кунду. Выполняет все документированные команды Z-80
и Z-180. 
Новые команды (из найденных в документации к од-
ному эмулятору, т.е., далеко не все): 

   CB 30   TSET   B  ;тестирование битов и ус-
                     ;тановка 
   CB 31   TSET   C 
   CB 32   TEST   D 
   CB 33   TSET   E 
   CB 34   TSET   H 
   CB 35   TSET   L 
   CB 36   TSET   (HL) 
   CB 37   TSET   A 


     Этими командами можно легко отличить Z-280
от Z80, типичный пример: 

       LD    A,40H 
       DB    0CBH,37H 
       JP    M,Z-80 
       JP    P,Z-280 


     Таким образом, программа Z-80, использующая
"недокументированные" команды (SLI - вообще по-
моему бесполезная) работать на Z-280 будет непра-
вильно! Мораль: т.к. никаких улучшений эти недоку-
ментированные команды не приносят, то и применять
их не следуют - пострадает совместимость и только.



NEC V20, V30 
══════════════ 


     Микропроцессор построен по архитектуре i8086,
но имеет подмножество команд i8080. Ширина шины
данных 8/16, адресует 1 Мб ОЗУ. Построен по техно-
логии КМОП, тактовая частота 10 Мгц. Выполняет в
среднем 1.5 млн. операций в секунду. Применяется в
двухсистемных ПЭВМ (например, DEC Rainbow), т.к.
может работать в системах MS-DOS, CP/M-86 и в
системах, совместимых с CP/M-80. 
     Запуск программы в кодах i8080 из режима
i8086 производится командой BRKEM N, где N - но-
мер программного прерывания 8086, в этом векторе
содержится адрес кода i8080 для исполнения. Регис-
тры 8086 при переходе в режим 8080 почти полнос-
тью соотвествуют, за исключением регистра sp 8080,
он становится равным bp 8086. 


  0F FF NN  BRKEM NN ;Переход на эмуляцию кода
                     ;i8080 


     В режиме i8080 добавляются команды: 

  ED ED NN  CALL  N  ;вызов прерывания 8086 
                     ;(INT N) 
  ED FD     RETEM    ;переход (возврат) в режим
                     ;i8086 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
              ;(INT N) 
  ED FD     RETEM    ;переход (возврат) в режим
                     ;i8086 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
  системы (BIOS) - (небольшая и
относительно простая) специально программировалась
для каждой машины с учетом ее аппаратных особен-
ностей. Эту часть системы создавали сами произво-
дители ПК. Таким образом получается, что CP/M сов-
местима с большинством 8-ми разрядных компьютеров.
     Именно широкая совместимость системы, а так-
же ряд других особенностей, таких, например, как под-
держка транзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
 ранзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 

(C) Чертков В.Ю. 
Music: SPECIAL COMPOS' by KENOTRON'96
───────────────────────────────────────────────────



             ╔═══════════════════╗ 
             ║                ║ 
             ║  ИЗУЧАЕМ CP/M  ║ 
             ║     часть 4     ║ 
             ║                ║ 
             ╚═══════════════════╝ 



  4. Терминалы 
  ▀▀▀▀▀▀▀▀▀▀▀ 


     Это может показаться странным, но видеоадап-
теры на персональных ЭВМ появились не сразу. Сна-
чала для отображения алфавитно-цифровой информации
были придуманы устройства на основе ЭЛТ, назван-
ные терминалами. Название было выбрано таким види-
мо из-за того, что эти устройства оканчивали цепоч-
ку передачи данных. Терминал представлял собой мо-
нитор со встроенным адаптером, позволяющий отоб-
ражать 80 символов в строке при количестве строк
от 24 до 30. Адаптер содержит свой собственный
процессор и видео-память. Для отображения символа
нужно просто послать код этого символа терминалу.
Символ отображается в текущей позиции курсора, по-
сле чего курсор перемещается на одну позицию впра-
во. Если строка выходила за пределы экрана, то она
либо обрывалась (WRAP OFF), либо переносилась на
следушую физическую строку (WRAP ON). Переключение
режима WRAP осуществлялось программно или аппарат-
но. По заполнению всего экрана осуществлялся скролл
вверх (Scroll Up) с очисткой последней строки. Кро-
ме обычных символов терминал распознавал управля-
ющие коды - конца строки (CR), перевода строки (LF),
очистки экрана (CLS), позиционирования курсора (CUR-
SOR MOVEMENT), удаления символа слева от курсора
(BACKSPACE) и др.  
     Адаптер соединялся с компьютером при помощи
какого-либо интерфейса - последовательного (чаще все-
го) или параллельного. Таким образом, подключить тер-
минал к компьютеру не составляло особого труда -
главное иметь в наличии соответствующий интерфейс.
С точки зрения программиста терминал выглядит как
принтер, отличие заключается в скорости (терминал
работает гораздо быстрее) и системе команд. Терми-
нал, как и принтер, воспринимает поток символов из
которых выделяются команды и данные. 
     Терминалы выпускали множество фирм, вот, к
примеру, несколько названий: Monroe, Morrow, DEC,
Xerox, Epson, Olivetti, Cromemco, Heath, Kaypro,
Osborne, Apple, Ericsson, Avatar, Compugraphic, Liber-
ty, Generic Televideo и др. 
     Большинство команд этих терминалов совмести-
мо между собой. Но почти везде имеются небольшие
отличия. Ситуация похожа на стандарт матричных
принтеров фирмы Epson: многие фирмы выпускают ана-
логичные принтеры, практически повторяя систему ко-
манд Epson'а, но для поддержки собственных "наворо-
тов", добавляют свои собственные команды или рас-
ширяют возможности существующих. Все они совмес-
тимы с Epson'ом, но не друг с другом. С терминала-
ми ситуация практически такая же, за исключением
того, что один терминал, в принципе, может поддер-
живать несколько взаимно не конфилктующих систем
команд. Например, команды терминалов VT-100 или
ANSI начинаются с кодов ESC,'[' (1Bh, 5Bh) и, таким
образом, не пересекается с командами других терми-
налов, поэтому они могут наравне со своими поддер-
живать и команды VT-100. 


     Кроме вышеназванных терминалов существует
еще и псевдотерминал TTY, т.е. работа в режиме те-
летайпа: символ печатается в текущую позицию курсо-
ра и обрабатывается лишь несколько управляющих ко-
дов. Команды TTY поддерживает любой терминал (а
также настоящий телетайп). Таким образом, у прог-
раммистов в CP/M при создании программы был выбор:
или писать ее под конкретный терминал или исполь-
зовать только "терминал" TTY. В первом случае про-
грамма будет работать только на совместимых тер-
миналах, во втором - на любых компьютерах. Бывают
программы как первого (например, SuperCalc), так и
второго типа (DD80). Более "умные" программы имели
утилиту настройки (setup или install), которая спра-
шивала у пользователя, какой у него терминал или
какой у него компьютер, после чего записывала кон-
фигурационные файлы, и программа прекрасно работа-
ла. 
     Сейчас рассмотрим системы команд некоторых
терминалов. 



TTY TERMINAL 
══════════════ 


Terminal identification name:  "TTY" 
Screen length default:        25 lines 
Auto-wrap:                  OFF 


     Печать в режиме телетайпа. Позволяет печа-
тать обычный текст в стандартной кодировке ASCII.
 Символы с кодом менее 20h делают следующее: 

^G [07]  звуковой сигнал (bell или beep) 
^H [08]  забой (backspace) 
^I [09]  табуляция, т.е. переход курсора в колонку,
        кратную 8 
^J [0A]  перевод строки (linefeed) 
^L [0C]  очистка экрана (clear screen) 
^M [OD]  возврат каретки (carriage return) 



VT52 TERMINAL 
═══════════════ 


Terminal identification name:  "VT52" 
Screen length default:       24 lines 
Auto-wrap default:           ON 


     Терминал позволяет печатать обычный текст в
стандартной кодировке ASCII. По умолчанию символы
выводятся с повышенной яркостью (bright), но имеет-
ся возможность переключаться на пониженное свече-
ние символов (dim). На экране могут отображаться од-
новременно как яркие, так и неяркие символы. Также
возможно установка абсолютного значения яркости
(64 уровня). 
 Символы с кодом менее 20h делают следующее: 

^A [01]  курсор в левое верхнее знакоместо (home
        cursor) 
^B [02]  режим пониженной яркости символа (dim mode)
^D [04]  очистка экрана и позиционирование курсора
        (0,0 - home) 
^G [07]  звуковой сигнал (beep) 
^H [08]  забой (backspace) 
^I [09]  табуляция, т.е. переход курсора в колонку,
        кратную 8 
^J [0A]  перевод строки (linefeed) 
^K [0B]  перемещение курсора на позицию вверх (cur-
        sor up) 
^L [0C]  очистка экрана (clear screen) 
^M [OD]  возврат каретки (carriage return) 
^X [18]  очистка до конца строки (clear to end of
        line) 
^Z [1A]  аналогично ^D 
ESC[1B]  управляющие (искейп) последовательности 
^^ [1E]  аналогично ^A 
^_ [1F]  carriage return and linefeed 


     Управление курсором осуществляется последо-
вательностью: ESCAPE,'Y',строка+20h,колонка+20h. Или
ESCAPE,строка+80h,колонка+80h. Начало координат в
верхнем левом углу (home). Остальные ESC-последова-
тельности: 


(  [28]   следующие символы будут яркими (go to
        bright mode) 
)  [29]   следующие символы будут неяркими (go to
        dim mode) 
* [2A]   очистка экрана (clear screen) 
+  [2B]   clear screen 
,  [2C]   clear screen 
:  [3A]   clear screen 
;  [3B]   clear screen 
A [41]   курсор вверх (cursor up) 
B [42]   курсор вниз (cursor down) 
C [43]   курсор вправо (cursor right) 
D [44]   курсор влево (cursor left) 
E [45]   clear screen and home cursor (Only clear
        screen for Amstrad.) 
H [48]   home cursor 
I  [49]   обратный первод строки (reverse linefeed)
J [4A]   очистка до конца экрана (delete to end of
        screen) 
K [4B]   очистка до конца строки (clear to end of
        line) 
L [4C]   вставка строки (insert line) 
M [4D]   удаление строки (delete line) 
R [52]   удаление строки (delete line) 


X       Установить размер окна вывода (Set text
        viewport): 


    TR, LC, H, W 


    TR= Row top of viewport+32  
    LC= Left column +32 
    H=  height (rows-1)+32 
    W=  Width as above. 


Y [59]   управление положением курсора; 


b установка яркости символов (foreground): 
   C=63d or 0d. 63 is bright, 0 is dark 
c установка яркости фона (background): 
   аналогично 0-самое темное... 63-самое яркое. 


d [64]   clear from start of screen to the cursor
        position 
e [65]   включить курсор (cursor on) 
f [66]   выключить курсор (cursor off) 
j [6A]   сохранить позицию курсора (save cursor) 
k [6B]   восстановить ранее сохраненную позицию
        курсора. 
l [6C]   очистка строки (clear line) 
o [6D]   очистка от начала экрана до текущей стро-
        ки 
p [70]   инверсные символы (go to reverse mode) 
q [71]   нормальные символы (cancel reverse mode) 
v [76]   перенос строк включить (turn line wrap on)
w [77]   перенос строк выключить (turn line wrap off)



          * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 


───────────────────────────────────────────────────
  on)
w [77]   перенос строк выключить (turn line wrap off)



          * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 


───────────────────────────────────────────────────
 и
относительно простая) специально программировалась
для каждой машины с учетом ее аппаратных особен-
ностей. Эту часть системы создавали сами произво-
дители ПК. Таким образом получается, что CP/M сов-
местима с большинством 8-ми разрядных компьютеров.
     Именно широкая совместимость системы, а так-
же ряд других особенностей, таких, например, как под-
держка транзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 



───────────────────────────────────────────────────
 ранзитных или внешних команд, сделала ее
столь популярной. 



         * ПРОДОЛЖЕНИЕ СЛЕДУЕТ * 

(C) Чертков В.Ю. 
Music: APPLE on PLATE/KENOTRON 96
───────────────────────────────────────────────────



            ╔═══════════════════╗ 
            ║                ║ 
            ║  ИЗУЧАЕМ CP/M  ║ 
            ║     часть 5     ║ 
            ║                ║ 
            ╚═══════════════════╝ 




GENERIC TELEVIDEO 912/LIBERTY/MORROW/ADM/ 
        GENERIC LEAR TERMINAL 
══════════════════════════════════════════════ 


     Эти терминалы имеют много общего, поэтому
ниже приводится сводная система команд, т.е. одни
команды относятся к одному типу терминалов, дру-
гие - к другому, некоторые команды могут совпадать.
     Для этих терминалов написано большинство при-
ложений под CP/M. Отличия терминалов заключаются
в количестве строк и вкл./выкл. режима AUTOWRAP. 
     Терминалы позволяют печатать обычный текст
в стандартной кодировке ASCII. Если курсор переме-
щается за последнюю строку, то делается ролик эк-
рана вверх на одну строку и последняя строка очи-
щается (auto scroll). Выводимые символы могут иметь
индивидуальные атрибуты (яркость, подчеркивание, ин-
версия, мигание). 


Сначала отличительные особенности: 

Terminal identification name: "ADM 3A" 
                        "Morrow MT70" 
                        "Televideo 912" 
Screen length default:      25 lines 
Auto-wrap default:          ON 


Terminal identification name: "GENERIC TELEVIDEO"
                        "LIBERTY" 
Screen length default:      24 lines 
Auto-wrap default:          ON 



Terminal identification name: "GENERIC LEAR  
                                  SIEGLER" 
Screen length default:      24 lines 
Auto-wrap default:          OFF 



Terminal identification name: "MORROW MDT20" 
Screen length default:      24 lines 
Auto-wrap default:          ON 


About the emulation: 


     Главное отличие заключается в том, что для
управления положнием курсора последовательностью
(ESC,=,...) необходимо поменять местами координаты
курсора (т.е., сначала задать номер колонки, а затем
строки). 


     Собственно система команд вышеназванных тер-
миналов. Символы с кодом менее 20h делают следу-
щее: 

^A [01]  следующие символы будут яркими (bright
        mode) 
^B [02]  следующие символы будут неяркими (dim
        mode) 
^D [04]  clear screen and home cursor 
^G [07]  beep 
^H [08]  backspace 
^I [09]  TAB 
^J [0A]  linefeed 
^K [0B]  cursor up 
^L [0C]  cursor right 
^M [OD]  carriage return 
^X [18]  clear to end of line 
^Z [1A]  clear screen and home cursor 
ESC[1B] 
^^ [1E]  home cursor 
^_ [1F]  carriage return and linefeed 


     Управление курсором осуществляется последо-
вательностью: ESCAPE,'=',Row+20h,Column+20h (Row -
строка, Column - колонка). Т.е., к значению координа-
ты необходимо прибавить 20h (код пробела), в про-
тивном случае код отработает как команда, а не как
параметр функции ESC,'='!. При выводе символа с ко-
дом 27 (1Bh) следующие за ним символы означают: 

" [22]   cursor type 
        ESC,",n  где n - это: 
        [1B,22,nn] 
             0  Block 
             1  Block 
             2  Block 
             3  Подчеркивание (Underline) 
             4  Подчеркивание (Underline) 
             5  Подчеркивание (Underline) 
             6  No cursor 
( [28]   go to bright mode 
) [29]   go to dim mode 
* [2A]   clear screen 
+ [2B]   clear screen 
, [2C]   clear screen 
.  [2E]   cursor control 
       ESC,.,n  где n - это: 
       [1B,2E,nn] 
            1   Cursor off 
            3   Cursor on 
:  [3A]   clear screen 
; [3B]   cursor control 
       ESC,;,n  где n - это: 
       [1B,3B,nn] 
            A   Cursor off 
            I   Cursor on 
= [3D]   cursor movement control (упр.курсором) 
A [41]   cursor up 
B [42]   Вкл. атрибутов (attributes on) 
       ESC,B,n  где n - это: 
       [1B,42,nn] 
            0   Inverse (Инверсный) 
            1   Bright (Яркий) 
            2   Blink (Мерцающий) 
            4   Cursor on 
C [43]   Выкл. атрибутов (attributes off) 
       ESC,C,n  где n - это: 
       [1B,43,nn] 
            0   Inverse (Инверсный) 
            1   Bright (Яркий) 
            2   Blink (Мерцающий) 
            4   Cursor on 
D [44]   удалить символ (delete character) 
E [45]   вставка строки (insert line) 
G [47]   Установить атрибуты для последующих сим-
        волов (set display attributes) 
       ESC,G,n  где n - это: 
       [1B,47,nn] 
            0   Normal (нормальные символы) 
            1   Underline (подчеркнутые) 
            2   Dim (темные) 
            4   Reverse (инверсные) 
            8   Blink (мигающие) 
     Указанные атрибуты можно устанавливать одно-
временно, для этого нужно сложить соответствующие
значения. 
     Назначение следущей команды не совсем ясно:
о каком графическом режиме идет речь? 
H [48]   graphics mode control (упр. графическим ре-
        жимом) 
       ESC,H,n  где n - это: 
       [1B,48,nn] 
            2   graphics mode on (граф. реж. вкл.)
          иначе graphics mode off (граф.реж.выкл.)
I [49]   go to reverse mode 
J [4A]   delete to end of screen 
K [4B]   clear line 
L [4C]   insert line 
M [4D]   delete line 
N [4E]   cancel reverse mode 
Q [51]   insert character 
R [52]   delete line 
T [54]   delete to end of line 
W [57]   delete character 
Y [59]   delete to end of screen 
d [64]   cursor on/off 
       ESC,d,n  где n - это: 
       [1B,64,nn] 
            0    cursor on 
          иначе  cursor off 
e [65]   cursor on 
f [66]   cursor off 
i [69]   back TAB (обратная табуляция) 
j [6A]   save cursor (сохранить позицию курсора) 
k [6B]   restore previously saved cursor position.
        (восстановление сохраненной позиции курс.)
l [6C]   go to bright mode 
m [6D]   go to dim mode 
q [71]   insert character (вставить символ) 
r [72]   delete line (удалить строку) 
t [74]   delete to end of line (удалить до конца
        строки) 
w [77]   delete character (удалить символ) 
y [79]   delete to end of screen (удалить до конца
        экрана) 



VT100 TERMINAL 
════════════════ 


Terminal identification name: "VT100" 
Screen length default:       24 lines 
Auto-wrap default:          ON 


     Терминал позволяет печатать обычный текст в
стандартной кодировке ASCII, управлять цветом вы-
водимых символов и формой курсора. 
     Все команды ANSI/VT100 начинаются с последо-
вательности ESC,'[' (1Bh,5Bh), после чего следуют па-
раметры. Таким образом, команды VT100 не пересека-
ются с командами других терминалов. Параметры за-
даются в виде: P1;P2;...;Pn;C - где P1 и P2 до Pn -
десятичные числа (если параметра нет, то предпола-
гается, что он равен нулю). Символом C обозначена
однобуквенная команда - символ ASCII: 


A [41] Курсор вверх. P1 задает число строк для пе-
      ремещения вверх. Значение P1 равное 0 экви-
      валентно 1. При достижении верхней строки
      команда ничего не делает. 
B [42] Cursor down. P1 задает число строк для пере-
      мещения вниз (+см. выше) 
C [43] Cursor right. P1 задает число столбцов для
      перемещения вправо (+ см. выше). 
D [44] Cursor left. P1 задаеы число столбцов для пе-
      ремещения влево (+ см. выше). 
H [48] Cursor positioning. P1 задает строку, а P2 -
      столбец. Левый верхний угол имеет координа-
      ты 1,1. Любой параметр, равный 0, считается
      равным 1. 
J [4A] Erase screen. P1 может быть 0, 1 или 2. 
      P1=0 - очистка от курсора до конца экрана,
      P1=1 - очистка от начала экрана до курсора,
      P1=2 - очистка всего экрана. 
K [4B] Erase line. P1 может быть 0, 1 или 2. 
      P1=0 - очистка от курсора до конца строки,
      P1=1 - очистка от начала строки до курсора,
      P1=2 - очистка всей строки. 
P [50] Delete character. P1 - номер удаляемого сим-
      вола. Если P1=0, удаляется первый символ. 
f [66] Cursor Positioning. См. H [48]. 
h [68] Set mode. Ignored. 
l [6E] Reset mode. Ignored. 


m [6D] Select video attributes. P1 содержит атрибут,
      который будет добавлен к текущему. 
      P1 может быть: 
      0 - clear all attributes, 
      1 - bright, 
      4 - underline, 
      5 - blinking, 
      7 - reverse. 
s [73] Save cursor position. 
u [75] Restore cursor position. 


     В более современных компьютерах терминалы
уже не используются, т.к. обладают рядом недостат-
ков: посимвольная печать (вывести строку символов
за одно обращение невозможно), ограничение в скорос-
ти вывода характеристиками интерфейса (ведь симво-
лы передаются по кабелю не мгновенно), невозможно
прочитать символы с экрана, и, наконец невозмож-
ность работы с графикой. На смену терминалам при-
шли видеоадаптеры, но драйверы экрана в системе
CP/M, как правило, эмулируют команды терминалов. 
     Таким образом, даже если выводить символы на
экран только через BDOS или BIOS, то есть возмож-
ность управления как цветом символов, так и поло-
жением курсора и др. Программа, работающая через
драйвер, естественно, более мобильна - ее легко пе-
ренести на другой ПК. 
     Драйвер экрана на Профи поддерживает часть
команд VT52 (почему не все - это надо спросить у
его автора), другая же часть была взята с потолка
(вернее, разработана заново). Естественно, что эти
"новые" команды не понимает ни одна западная CP/M
программа. 



    * ПРОДОЛЖЕНИЕ В СЛЕДУЮЩЕМ НОМЕРЕ * 



Другие статьи номера:

Информбюро - О планах редакции журнала.

Авторы - Авторы журнала и контакты редакции.

Информбюро - Путеводитель по журналу.

Лоцман - О игре SubSunk.

Лоцман - Описание игры DARK SIDE.

Лодырь - Полное прохождение игры ЗЕРКАЛО.

Калейдоскоп - О игре Пыль звездных дорог.

Калейдоскоп - О втором виртуальном фестивале компьютерного искусства Art Comp-99.

Калейдоскоп - Презентация текстовой утилиты - Text Utility V2.8i.

Скелет - Описание звуковой карты DMA SOUND.

Скелет - Недокументированная особенность процессора Z80.

История - Жизнь после Вилли. Софтография Мэтью Смита.

История - О фидошном слэнге.

Лаборатория - интро POORGUY! - изнутри (исходный текст с комментариями).

Лаборатория - ZX-SPECTRUM и операционные системы.

Лаборатория - Процедуры от MicroSoft.

Лаборатория - Алгоритм вывода десятичных чисел на экран монитора из регистра DE & HL.

Лаборатория - Алгоритм деления и умножения больших чисел.

PROFI CLUB - Изучаем CP/M (совместимость, процессоры, терминалы).

Юмор - Лесенка - советы грамотному юзеру.

Юмор - Стих "OA программистов".

Пишите письма - Письма читателей в журнал.

Реклама - Реклама и объявления ...

ZXTraders - Действyющие распространители программного обеспечения ZX Spectrum по России и Украине


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Demoscene - Deja Vu #05: Затишье на демосцене.
Железо - схема подключения светоин-дикатора, отображающего экран 128К машин является в данный момент активным.
Обзор - PIPE WORK, KIK START 2, THE CHIP FACTORY, DIGGER DAN, КУБОК АВИЛЛИАДЫ, SCHLACHT.
Анкета - Surfin Вird.
Вопросы и ответы.

В этот день...   23 апреля