(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
программа.
* ПРОДОЛЖЕНИЕ В СЛЕДУЮЩЕМ НОМЕРЕ *