Статья 1, "С CP/M-80 на ты", все про OS DOS к Ориону-128

Как изучить CP/M-80, основы операционной системы СПМ-80.

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

Дата обновления информации 22.06.2023

По Журналу Радиолюбитель № 1 1994 г

Сейчас на 14/07/2022 сделано и запущено 3 вида контроллера дисководов:

Сафронов Сугоняко  (Авторский, Орион Софт)

Рогов, Бриджиди (Орион Серсвис)

Контроллер Короткина

В. СУГОНЯКО, 142440, Московская обл., п. Обухово, а/я 13. "ОРИОНСОФТ".

ОРИОН-128. С СР/М НА "ТЫ"

Операционная система (ОС) СР/М-80 (Control Program for Microcomputers) была разработана в 1977 г. фирмой DIGITAL RESEARCH Inc. первоначально для компьютера MDS800 фирмы INTEL, а затем стала самой популярной для 8-разрядных микропроцессоров 18080 и Zilog Z80. В отличие от других операционных систем СР/М имеет небольшой набор стандартных и быстро осваиваемых непрофессиональными пользователями директив, легко адаптируется под компьютер любой конфигурации и занимает минимальный объем ОЗУ. Благодаря этому она стала стандартом для восьмиразрядных микрокомпьютеров.

НГМД Орион Сервиса схема Сборка НГМД Орион Сервиса Плата  Запуск и настройка Ориона Про, контроллер на ГМД, записываем программы на дискеты 5,2 дюйма и подключение дисковода 1,44 мгб Контроллер дисковода М. Короткина по журналу Радио, разведена плата 07/10/2021, наконец пришла

Слева на право, НГМД Орион-Сервиса, Орион Софта, Короткина

Скачать книгу CP/M-80 одним архивом для изучения, в формате DJVU, для просмотра нужна программа

Для ОС СР/М было написано более 25000 пакетов программ, в том числе трансляторы практически всех языков высокого уровня, электронные таблицы и базы данных. Первые версии популярных сейчас программ Lotus 1 -2-3, Frame Work, Dbase и др. появились еще под СР/М.

Наибольшее распространение получили версии СР/М - 1.4, 2.2, 3.0 и 3.0к.  Версия 2.2 появилась в 1979 г. и значительно превосходила своих предшественниц, в частности, поддерживала файлы объемом до 8 Мбайт (вместо 512 Кбайт) и имела вдвое увеличенное количество системных функций (средства прямого доступа к файлам и т.д.), а также усиленный набор системных утилит (загружаемых директив).

СР/М версии 2.2 используется на отечественных ЭВМ СМ 1800, С0-05 и ПК8020 ("Корвет"), а версия 3.0 под именем "SCP" адаптирована на компьютере "Роботрон-1715".

ОС состоит из 3-х модулей - ССР, BDOS и BIOS. При установке СР/М на компьютер адаптации подлежит лишь модуль BIOS, выполняющий дисковые операции и операции ввода/вывода самого низкого уровня (т.е.управление непосредственно "железом"). От того, насколько удачно написан BIOS, во многом зависит удобство пользования компьютером и программная совместимость. В нашем случае сложность адаптации BIOS заключалась в том, что первоначально он предназначался для управления аппаратными интерфейсными устройствами - дисплей (с аппаратным курсором), клавиатура и другие устройства ввода/вывода. В компьютерах "Корвет" и "Орион-128" аппаратные функции этих устройств реализованы программно, поэтому при адаптации ОС потребовалось применение всевозможных программных ухищрений.

В качестве базового шаблона при адаптации СР/М на "Орион-128" использован BIOS ПК "Корвет", рассчитанный на контроллер КР1818ВГ93. Устройство контроллера, методы его сборки и отладки, а также тест-программы и холодный загрузчик приведены в (1).

В этой статье мы хотим рассказать о внутренних "секретах" СР/М, о том, как устроен ВООТ-сектор и что это такое, описать функции BDOS и их применение и векторы BIOS.

Несмотря на то, что за рубежом было издано много литературы на эту тему, у нас в стране информацию по ней найти очень трудно, особенно по техническим аспектам операционной системы (в отношении пользовательских руководств еще есть кое-что). Дело в том, что до заката СР/М на Западе мы еще не начали ее широко применять, а когда спохватились - уже неоткуда было "заимствовать" ни программы, ни информацию по СР/М. Немногие программисты-одиночки, постигшие какие-то "внутренние секреты СР/М", сделали из этого "профессиональную тайну", став незаменимыми в своем деле. Часто же они просто не решались связываться с проблемами, возникающими при публикации.

Изучаем CP/M-80, основы операционной системы СПМ-80 для Орион-128

Разберем более подробно назначение служебных ячеек и констант. По адресу 0000-0002 находится вектор перехода на дополнительный загрузчик. Наличие байта ОСЗН по адресу 0000Н указывает LDOSS на то, что данная дискета содержит операционную систему. В противном случае (после процесса форматирования) там находится байт 0Е5Н и "холодный" загрузчик не передает управление дополнительному, а выводится сообщение "NON-SYSTEM DISK".

Далее. 0003-0007 - ячейки, используемые самой СР/М. По адресу 0007-001F находится информация, описывающая структуру (или стандарт) дискеты: количество дорожек, сторон, плотность записи и другую служебную информацию. Она формируется и записывается программой FORMAT.COM применительно к тому режиму, в котором происходил процесс форматирования дискеты. В наследство от "Корвета" "Ориону" досталось все многообразие этих "стандартов".

Дискета: одно-двусторонняя, 80-40 дорожек, одинарная-двойная плотность. Авторы поддерживают (и мы просим пользователей "Орион-128" делать это) следующий вариант: 80 дорожек, две стороны, двойная плотность. Это позволит получить максимальную полезную емкость дискеты и иметь единый "стандарт" для ПК "Орион- 128", что избавит пользователей oi проблем при распространении программ.

В ячейках 0020Н-002А размещается имя дискеты. Программа форматирования дискет FORMAT.COM, написанная авторами, заносит в эти ячейки имя "Орион-128.2". В OS-DOS версий 2.30,2.31, 2.40, 2.60 имя дискеты не используется, т.к. требуется модификация ССР и BDOS, что до настоящего времени было "табу" у разработчиков (именем дискеты оперирует авторская программа "АТЛАС". Последующие версии OS-DOS будут доработаны так же).

Но адресу 002В-002СН находится адрес размещений СР/М в ОЗУ при считывании ее со второго сектора и далее (напомним: первый сектор, где размещался ВООТ-сектор и начало ССР, мы считали в служебный буфер "холодного" загрузчика). Управление считанной операционной системе передастся по адресу, находящемуся в ячейке 002D-002E. Это адрес входа в вектор BIOS для "холодного" перезапуска СР/М, т.е. производится повторное считывание ССР и BDOS с дискеты BIOSom. Этим компенсируются потери части ССР при первичном считывании ОС загрузчиком LDOSS.

Ячейка 002FH - флаговая. Ее значение указывает на страницу (банк) загрузки СР/М. Флаг используется вторичным загрузчиком.

00 указывает на основную страницу загрузки СР/М (OS-DOS48K),

01 - загрузка в страницу I (OS-DOS6OK) и т.д.

11о адресам 0030H - 00CBH находится вторичный загрузчик. 11о-сле выполнения своих функций (считывание и запуск СР/М) он затирается. На его месте операционная система размещает свои служебные буферы.

Следует сказать, что построенный авторами по такой схеме ВООТ-сектор не требует изменений при применении его как для OS-DOS48K (размещается в основной памяти компьютера - V2.30, 2.31, 2.40), так и для OS-DOS6OK (размещается в дополнительной странице 1 -3 - V2.60). Модификации подвергаются только две пары ячеек - 002В-002С и 002D-002E. Для OS-DOS6OK они имеют значения 0CB00H и 0DA00H соответственно.

В процессе работы СР/М ячейки по адресу 0000-0007Н имеют следующее назначение:

0000-0002Н - вектор перехода в BIOS на перезагрузку СР/М ("горячий старт"). По этому адресу передается управление после окончания выполнения пользовательской программы. При этом происходит восстановление ССР и BDOS, если они были затерты.

0003Н - байт переназначения логических устройств.

0004Н - номер текущего диска.

0005-0007Н - вектор входа в BDOS для вызова функции на выполнение. Для этого предварительно подготавливается состояние регистров, затем вызывается функция как подпрограмма по адресу 0005Н (CALL 5).

BIOS. ТАБЛИЦА ВЕКТОРОВ

Вход в BIOS (BASIC INPUT/OUTPUT SYSTEM) осуществляется через таблицу векторов. Она размещается в начале модуля BIOS. Таблица векторов состоит из 17 входов на подпрограммы, выполняющих функции управления и взаимодействия с "железом" компьютера. Некоторые изэтих векторов могут быть "пустыми" для определенных функций (к примеру, содержать только команду RET-READER, PUNCH и др.), но вход в таблице векторов должен присутствовать.

Изучаем CP/M-80, основы операционной системы СПМ-80 для Орион-128

Значение BAS - это адрес начала размещения BIOS в памяти компьютера. Его следует считывать с ячеек по адресу 0001-0002Н. Для OS-DOS48K - 0AC00H, для OS-DOS6OK - 0DA00H.

Таблица векторов по функциональному назначению делится на три основные группы:

- реинициализация системы (BOOT и WBOOT);

- ввод-вывод байтовой информации (CONST, CONIN, CONOUT, LIST, PUNCH, READER и LISTST);

- блочный ввод-вывод для обмена с диском (HOME, SELDSK, SETTRK, SETSEK, SETDMA, READ, WRITE и SECTRAN);

Рассмотрим более подробно функциональные особенности векторов BIOS.

BOOT - получает управление от вторичного загрузчика системы и выполняет инициализацию, включая выдачу сообщения о запуске СР/М. После инициализации параметров системы передает управление в модуль ССР для дальнейшей работы, установив текущим дисковод "А".

WBOOT - получает управление, когда необходима (если затерты BDOS и ССР) перезагрузка системы. "Теплый старт" системы происходит и при передаче управления программой пользователя в ячейку с адресом 0000Н (стандартный способ окончания программ пользователя в среде СР/М) или вводе СI'КL/C. При этом производится загрузка в память компьютера с системных дорожек диска - ССР и BDOS. По завершении инициализации WBOOT передает управление в ССР. Устанавливается номер текущего дисковода, инициализированный до рестарта системы.

CONST - производит опрос активности клавиатуры и возвращает в регистре "A" 0FFH если клавиша клавиатуры нажата, или ООН - если не нажата. По выполняемой функции аналогична подпрограмме STAT (0F812H) Монитора.

CONIN - считывает символ с клавиатуры, ожидая нажатия клавиши. Результат возвращается в регистре "А". По выполняемой функции аналогична подпрограмме KBRD (0F803H) Монитора.

CONOUT - выводит символ из регистра "С" на экран дисплея. По выполняемой функции аналогична подпрограмме TVC (0F809H) Монитора.

LIST- выводит символ из регистра "С" на принтер. В теле BIOS OS-DOS драйвер принтера не содержится и загружается в виде СОМ-файла пользователем.

PUNCH - выводит байт на перфоратор. В реализации ранее перечисленных версий OS-DOS фирмы "Орионсофт" вектор не используется. Установлена "заглушка".

READER - считывает байт с перфосчитывателя. В реализации ранее перечисленных версий OS-DOS вектор также не используется. Установлена "заглушка".

НОМЕ- помещает считывающую головку выбранного дисковода в исходное состояние, т.е. на дорожку с номером "00". Можно использовать подпрограмму SETI'RK с параметром равным ООН.

SELDSK - выбирает дисковод, номер которого задастся в регистре "С". Это необходимо для последующих операций чтения/записи . При С - 0 выбирается дисковод "А", С - 1 - дисковод " В", С - 2 - "С" (электронный RAM-диск в OS-DOS версии 2.60). При каждом вызове подпрограмма SELDSK должна возвращать в регистровой паре HL адрес таблицы описания диска (DISK PARAMETER HEADER). Если делается попытка выбора несуществующего дисковода, то HL - 0000Н.

SETTRK - выбирает дорожку на диске по содержимому регистровой пары ВС (номер дорожки не должен превышать 79).

SETSEC - выбирает сектор на выбранной дорожке по содержимому регистровой пары ВС.

SETDMA - устанавливает адрес буфера обмена, в который но регистру ВС будет считана одна запись (128 байт) в память компьютера. По умолчанию устанавливается буфер по адресу 0080Н.

READ - подпрограмма считывает одну запись с диска в память компьютера начиная с адреса, установленного в последней операции SETDMA, и заканчивая этим адресом +128 байт. Подпрограмма (предварительно устанавливают SETTRK, SETSEC) в регистре "Л" возвращает следующие параметры:

Л - 0 - нет ошибок;

А > 0 - ошибка при считывании сектора.

WRITE - подпрограмма производит одну запись из памяти компьютера (с адреса, определенного в последней операции SETDMA, размером в 128 байт) на выбранные сектор - дорожку - диск (операции SETSEC, SETTRK, SETDSK). Возвращает параметры, аналогичные команде READ.

Следует уточнить, что подпрограммы READ и WRITE предварительно вычисляют, в каком секторе какой дорожки находится искомая запись. Затем производят считывание/запись сектора (I Кбайт) и найденную запись (128 бант) переносят в буфер обмена по адресу, установленному в SETDMA.

Такая "двойная бухгалтерия" происходит из-за того, что в былые времена сектор имел размер 128 байт и назывался "Запись". Дорожки на дискете размещались с одной стороны и содержали по 40 секторов. Современные дисководы имеют более высокие плотности записи на дискету. Чтобы реализовать это достижение, пришлось изменить структуру дорожки - сделать на ней 5 секторов размером I Кбайт. Это уменьшило количество служебной информации на дорожке и резко повысило объем полезной.

Mo BDOS остался без изменений и оперирует "по старинке" записями по 128 байт. Пришлось на BIOS возложить функции "бухгалтера".

LISTST - производит опрос статуса состояния (готов/не готов) принтера. Подпрограмма в теле BIOS не содержится и загружается совместно с подпрограммой вывода символа на принтер. При готовности принтера возвращает в регистре "А" значение ООП.

SECTRAN - осуществляет преобразование логического номера записи в физический сектор на диске. Изначально задумана для ускорения доступа к информации на диске за счет использования принципа чередования секторов на дорожке. Однако это было актуально тогда, когда размеры записи и сектора равнялись 128 байтам. В реализации современного BIOS (в том числе и для "Орион-128") данный вектор из-за "двойной бухгалтерии" утратил актуальность и не используется. Тем не менее, по запросу BDOS он эмулирует свои функции.

Некоторые особенности использования векторов:

- все операции символьного ввода/вывода выполняются в коде ASCII (КОИ-7) со сброшенным в 0 битом четности (D7 - 0);

- условием конца текстового файла в СР/М является включение в файл кода 1АН (или CTRL/Z);

- периферийные устройства воспринимаются СР/М как "логические" устройства и соотносятся с физическими только посредством модуля BIOS;

- обмен с диском всегда осуществляется с помощью вызова подпрограмм доступа к диску. Предварительное помощью дополнительных векторов выбирают номер диска, дорожку, сектор на дорожке и устанавливают адрес размещения считанной информации. После того как эти параметры установлены, осуществляется обращение к функциям READ или WRITE для выполнения собственно операции чтения/записи сектора. Раньше чем возвращается признак ошибочного завершения операции, выполняется несколько попыток (обычно 5-6).

BDOS. СИСТЕМНЫЕ ФУНКЦИИ

Системные функции BDOS доступны пользователю только на логическом уровне ввода/вывода информации на диск и осуществляются через буфер обмена. Системный буфер обмена (по умолчанию) располагается по адресу 0080Н. Этот адрес может быть изменен функцией "Установить адрес буфера обмена" (Функция 26).

Операции с каталогом выполняются в резервном буфере, расположенном в теле BIOS, и не оказывают влияния на буфер обмена за исключением функции "Поиск первого" и "Поиск следующего".

Функция 0. Процедура "горячий старт".

Вход: Регистр С - 10Н

Процедура "горячий старт" загружает в память компьютера модули ССР и BDOS СР/М. Управление передается в ССР, при этом активным становится диск "А". Действие функции эквивалентно переходу по адресу ООООН.

Функция 1. Консольный ввод.

Вход: Регистр С - 01Н.

Выход: Регистр А - код символа.

Функция вводит с клавиатуры символ и возвращает его программе в регистр "А". Отображаемые и управляющие символы - CR (Возврат каретки), LP (Перевод строки), BSP (Забой) - выводятся с эхом на экран. Ввод управляющего символа CTRL/I (TAB) перемещает курсор на 8 позиций вправо. Осуществляется проверка на включение или выключение режима параллельной печати - CTRL/P (если загружен драйвер обслуживания принтера) и останов/пуск вывода информации на экран - CTRL/S. Функция находится в режиме ожидания до тех пор, пока не будет повторно нажата клавиша.

Функция 2. Вывод символа на консоль.

Вход: Регистр С ~ 02Н.

Выход: Регистр Е - код выводимого символа.

Заданный в регистре "Б" символ (в пределах таблицы ASCII) выводится на экран дисплея. Аналогично функции 1 осуществляется проверка наличия управляющих символов CTRL/I, CTRL/S, CTRL/P и др.

Функция 3. Ввод символа с логического устройства READER - перфосчитывателя.

Вход: Регистр С - 03Н.

Выход: Регистр А - код введенного символа.

В разработанных авторами до настоящего времени версиях OS-DOS функция не выполняется и имеет "заглушку" на уровне вектора BIOS. Планируется переопределить функции 3 и 4 для драйверов работы с сетью.

Функция 4. Вывод символа на логическое устройство.

PUSCH - перфоратор.

Вход: Регистр С-04Н.

Регистр Е - код выводимого символа.

Гак же, как и функция 3, не выполняется и имеет "заглушку" на уровне вектора BIOS.

Функция 5. Вывод символа на логическое устройство.

LIST - принтер.

Вход: Регистр С - 05Н.

Регистр Е - код выводимого символа.

До загрузки внешнего драйвера обслуживания принтера функция не выполняется и имеет "заглушку" на уровне вектора BIOS.

Функция 6. Ввод/вывод символа с консоли без эха (без отображения на дисплее).

Вход: Регистр С - 06Н.

Регистр Е - 0FFH или 0FEH - при вводе.

Е = код выводимого символа - при выводе.

Выход: Регистр А - введенный символ или статус консоли.

Если в регистре "Е" задано 0FFH (ввод символа без эха/опрос статуса), в регистре "А" возвращается:

- ООН, если консоль не готова к вводу символа;

- введенный символ - при готовности консоли.

Если в регистре "Е" задано 0FEH (только опрос статуса), в регистре "А" возвращается:

- ООН, если консоль не готова;

- ненулевое значение при готовности консоли.

Если в регистре "В" задан код. отличный от 0FFH или 0FEH, предполагается, что это код выводимого символа. Проверка на наличие ранее указанных управляющих символов не производится.

Функция 7.11олучить байт назначения устройств (БНУ).

Вход: Регистр С - 07Н.

Выход: Регистр А - значение БНУ.

(Продолжение следует)

Как подключить z80 в Орион-128

Новая плата Орион-128.2 ревизия 512.3, сборка

Программирование на процессоре z80, документация

Тесты процессоров Z80

 

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

 

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

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