Voyager
#03
19 октября 1998 |
|
PROFI CLUB - Изучаем 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 программа. * ПРОДОЛЖЕНИЕ В СЛЕДУЮЩЕМ НОМЕРЕ *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября