Корвет/BDOS

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

АННОТАЦИЯ

  BDOS  ОС  CP/M  имеет набор функций, обеспечивающих удобный
доступ к файлам на дисках и позволяющих выполнять ряд стандартных де-
йствий при работе с другими переферийными устройствами. При работе с
дисками за основу берется файловая структура и динамическое распреде-
ление  дискового пространства как при последовательном, так и при
прямом методе доступа. Эта организация файлов позволяет хранить на
дисках большое количество программ в исходном виде и в машинных
кодах и сохраняет одинаковую структуру для всех файлов В ОС CP/M.
Доступ программ пользователя к процедурам     BDOS
осуществляется посредством передачи номера функции и параметров
через единую точку входа. BDOS выполняет заданную процедуру
и передает управление программе пользователя,возвращая результат
операции.

                        СОДЕРЖАНИЕ

Аннотация............................................................... 2

1.    НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ................................... 4
2.    ХАРАКТЕРИСТИКИ BDOS............................................... 5
3.    ОБРАЩЕНИЕ К BDOS. ВХОДНАЯ И ВЫХОДНАЯ ИНФОРМАЦИЯ................... 6
4.    ФУНКЦИИ BDOS ..................................................... 8
4.1.  ФУНКЦИЯ 0: ПРОЦЕДУРА "ГОРЯЧИЙ СТАРТ".............................. 8
4.2.  ФУНКЦИЯ 1: КОНСОЛЬНЫЙ ВВОД........................................ 8
4.3.  ФУНКЦИЯ 2: ВЫВОД СИМВОЛА НА КОНСОЛЬ............................... 8
4.4.  ФУНКЦИЯ 3: ВВОД СИМВОЛА С ЛОГИЧЕСКОГО УСТРОЙСТВА RDR ............. 9
4.5.  ФУНКЦИЯ 4: ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО PUN ............ 9
4.6.  ФУНКЦИЯ 5: ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО LST ............ 9
4.7.  ФУНКЦИЯ 6: ВВОД/ВЫВОД СИМВОЛА С КОНСОЛИ БЕЗ ЭХА .................. 9
4.8.  ФУНКЦИЯ 7: ПОЛУЧИТЬ БАЙТ НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ)...............10
4.9.  ФУНКЦИЯ 8: УСТАНОВКА БАЙТА НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ).............10
4.10. ФУНКЦИЯ 9: ВЫВОД СИМВОЛЬНОЙ СТРОКИ................................10
4.11. ФУНКЦИЯ 10: ЧТЕНИЕ В КОНСОЛЬНЫЙ БУФЕР.............................11
4.12. ФУНКЦИЯ 11: ОПРОС СТАТУСА КОНСОЛИ.................................12
-             12  Запрос номера версии
-             13  Сброс дискетной системы
4.13. ФУНКЦИЯ 14: АКТИВИЗИРОВАТЬ ДИСК...................................12
4.14. ФУНКЦИЯ 15: ОТКРЫТИЕ ФАЙЛА........................................12
4.15. ФУНКЦИЯ 16: ЗАКРЫТИЕ ФАЙЛА........................................13
4.16. ФУНКЦИЯ 17: ПОИСК ПЕРВОГО.........................................13
4.17. ФУНКЦИЯ 18: ПОИСК СЛЕДУЮЩЕГО......................................14
4.18. ФУНКЦИЯ 19: СТИРАНИЕ ФАЙЛА........................................14
4.19. ФУНКЦИЯ 20: ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ...............................14
4.20. ФУНКЦИЯ 21: ПОСЛЕДОВАТЕЛЬНАЯ ЗАПИСЬ...............................15
4.21. ФУНКЦИЯ 22: СОЗДАНИЕ ФАЙЛА........................................15
4.22. ФУНКЦИЯ 23: ПЕРЕИМЕНОВАНИЕ ФАЙЛА..................................16
4.23. ФУНКЦИЯ 24: ПОЛУЧИТЬ ВЕКТОР УСТАНОВЛЕННЫХ ДИСКОВ..................16
4.24. ФУНКЦИЯ 25: ПОЛУЧИТЬ НОМЕР АКТИВИЗИРОВАННОГО ДИСКА................16
4.25. ФУНКЦИЯ 26: УСТАНОВИТЬ АДРЕС БУФЕРА ОБМЕНА........................17
4.26. ФУНКЦИЯ 27: ПОЛУЧИТЬ АДРЕС ВЕКТОРА РАЗМЕЩЕНИЯ БЛОКОВ..............17
4.27. ФУНКЦИЯ 28: ЗАПИСАТЬ КЛЮЧ ЗАЩИТЫ ДИСКА............................17
4.28. ФУНКЦИЯ 29: ПОЛУЧИТЬ ВЕКТОР R/O ДЛЯ ДИСКОВ........................18
4.29. ФУНКЦИЯ 30: УСТАНОВИТЬ ИНДИКАТОР ДОСТУПА ФАЙЛА....................18
-             31: Запрос адреса параметров привода.
-             32: Установка/запрос кода пользователя.
4.30. ФУНКЦИЯ 33: ПРЯМОЕ ЧТЕНИЕ.........................................18
4.31. ФУНКЦИЯ 34: ПРЯМАЯ ЗАПИСЬ.........................................19
4.32. ФУНКЦИЯ 35: ВЫЧИСЛИТЬ РАЗМЕР ФАЙЛА................................19
4.33. ФУНКЦИЯ 36: УСТАНОВИТЬ НОМЕР ЗАПИСИ ДЛЯ ПРЯМОГО ДОСТУПА...........20
-             37: Сброс приводов.
4.34. ФУНКЦИЯ 40: ПРЯМАЯ ЗАПИСЬ С ЗАПОЛНЕНИЕМ НУЛЯМИ....................20
5.    СТРУКТУРА ФАЙЛОВ В ОС CP/M........................................21
5.1.  ФАЙЛОВАЯ ССЫЛКА...................................................21
5.2.  БЛОК УПРАВЛЕНИЯ ФАЙЛОМ (БУФ)......................................22
6.    СООБЩЕНИЯ ОБ ОШИБКАХ..............................................24
7.    ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ...........................................25



            E 1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ  F
     
    E BDOS  F   предоставляет в распоряжение программиста набор
функций,позволяющих выполнять ряд стандартных действий при работе с
периферийными устройствами и с файлами на дисках.
   Пpи использовании функций BDOS обязательным условием
является знание ДОКУМЕНТА [1], содержащего разъяснения основных
понятий и общей организации ОС CP/M, список принятых в документации
по ОС CP/M сокращений и условных обозначений, так-же таблицу мнемониче-
ских обозначений,кодов и способов ввода управляющих и графических
символов с клавиатуры.

     
           E  2. ХАРАКТЕРИСТИКИ BDOS  F
     
После начальной загрузки память машины имеет следующую
     структуру, общую для всех CP/M машин:

     0000H:  !-----------------------!
             ! Область системных     !
             ! параметров (ОСП)      !
             !-----------------------!
     0100H:  ! Область программ (ОП) !
             !                       !
             !-----------------------!
     Адрес1: ! Процессор консольных  !
             ! команд (CCP)          !
             !-----------------------!-
     Адрес2: ! Базовая дисковая      ! !
             ! система  (BDOS)       ! !  СИСТЕМА УПРАВЛЕНИЯ
             !-----------------------! >  ВВОДОМ/ВЫВОДОМ
     Адрес3: ! Система драйверов     ! !      (СУВВ);
             ! ввода/выводв (BIOS)   ! !
             !-----------------------!-

     
     Адрес1 нахадится в слове по адресу 0001Н
     Адрес2 находится в слове по адресу 0006Н
     Адрес3 = Адрес2 - 0806Н
     


BDOS устроен очень сложно,состоит из процедур обмена с диском и другими
логическими устройствами и копаются в нем только системные программисты.
Если вы плохо знаете даже BIОS, то лучше туда не суйтесь.

 Логические устройства имеют следующие имена::
   CON, RDR, PUN, LST и так  далее.

          Пользователь должен помнить, что:
     
- ВВОД/ВЫВОД НА ЛОГИЧЕСКОЕ УСТРОЙСТВО CON ЯВЛЯЕТСЯ ВВОДОМ/ВЫВОДОМ НА
  КОНСОЛЬ;
- ВВОД С ЛОГИЧЕСКОГО УСТРОЙСТВА RDR ЯВЛЯЕТСЯ ВВОДОМ С ПЕРФОЛЕНТЫ;
- ВЫВОД НА ЛОГИЧЕСКОЕ УСТРОЙСТВО PUN ЯВЛЯЕТСЯ ВЫВОДОМ НА ПЕРФОЛЕНТУ;
- ВЫВОД НА ЛОГИЧЕСКОЕ УСТРОЙСТВО LST ЯВЛЯЕТСЯ ВЫВОДОМ НА ПЕЧАТЬ.

   E BIOS  F зависит от конкретных аппаратных средств.
и содержит драйверы работы с физическими устройствами и обеспечивает
выполнение процедур "ГОРЯЧИЙ/ХОЛОДНЫЙ СТАРТ".
     
  E      3. ОБРАЩЕНИЕ К СУВВ. ВХОДНАЯ И ВЫХОДНАЯ ИНФОРМАЦИЯ  F
     
   Доступ к процедурам BDOS из программ пользователя осуществ-
ляется с помощью передачи номера функции и параметров через единую
точку входа.Безусловный переход на точку входа BDOS стоит по адресу
   0005H.
Ппи обращении к BDOS из программы пользователь должен подго-
товить следующую информацию:
     
- номер функции BDOS в регистре С;
- параметры заданной функции в регистровой паре DE при передаче
адреса, или в регистре Е при передаче однобайтного параметра.

При возврате в программу пользователя однобайтный
результат возвращается в регистре A, двухбайтный - в паре
     регистров HL.
Кроме того на выходе из BDOS содержимое регистров A и L, а
 так-же  регистров B и H совпадает.

 Перечень функций BDOS с указанием их номеров приведен ниже.
 E
    НОМЕР ФУНКЦИИ          НАЗНАЧЕНИЕ    F
----------------------------------------------------------------------------

0                 "ГОРЯЧИЙ СТАРТ" (ПЕРЕЗАГРУЗКА CCP и BDOS)
1                 ВВОД СИМВОЛА С КОНСОЛИ
2                 ВЫВОД СИМВОЛА НА КОНСОЛЬ
3                 ВВОД СИМВОЛА С ЛОГИЧЕСКОГО УСТРОЙСТВА RDR
4                 ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО PUN
5                 ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО LST
6                 ПРЯМОЙ ВВОД/ВЫВОД СИМВОЛА С КОНСОЛИ
7                 ПОЛУЧИТЬ БАЙТ НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ)
8                 УСТАНОВИТЬ БАЙТ НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ)
9                 ВЫВОД СТРОКИ СИМВОЛОВ
10                ЧТЕНИЕ КОНСОЛЬНОГО БУФЕРА
11                ОПРОС СТАТУСА КОНСОЛИ
12 *              Запрос номера версии.
13 *              Сброс дискетной системы
14                АКТИВИЗАЦИЯ ДИСКА
15                ОТКРЫТИЕ ФАЙЛА
16                ЗАКРЫТИЕ ФАЙЛА
17                ПОИСК ПЕРВОГО
18                ПОИСК СЛЕДУЮЩЕГО
19                СТИРАНИЕ ФАЙЛА
20                ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ
21                ПОСЛЕДОВАТЕЛЬНАЯ ЗАПИСЬ
22                СОЗДАНИЕ ФАЙЛА
23                ПЕРЕИМЕНОВАНИЕ ФАЙЛА
24                ПОЛУЧИТЬ ВЕКТОР УСТАНОВЛЕННЫХ ДИСКОВ
25                ПОЛУЧИТЬ НОМЕР АКТИВИЗИРОВАННОГО ДИСКА
26                УСТАНОВИТЬ АДРЕС БУФЕРА ОБМЕНА
27                Предоставление адреса вектора распределения.
28                ЗАПИСАТЬ КЛЮЧ ЗАЩИТЫ ДИСКА
29                ПОЛУЧИТЬ ВЕКТОР R/O для ДИСКОВ
30                УСТАНОВИТЬ ИНДИКАТОР ДОСТУПА ФАЙЛА
31 *              Предоставление адреса параметров привода.
32 *              Установка/запрос кода пользователя.
33                ПРЯМОЕ ЧТЕНИЕ
34                ПРЯМАЯ ЗАПИСЬ
35                ВЫЧИСЛИТЬ РАЗМЕР ФАЙЛА
36                УСТАНОВИТЬ НОМЕР ЗАПИСИ ДЛЯ ПРЯМОГО ДОСТУПА
37 *              Сброс приводов.
40                ПРЯМАЯ ЗАПИСЬ НА ОБНУЛЕННЫЙ БЛОК

    Функции с номерами   38,39 и больше 40
не используются. При обращении к функциям с перечисленными
номерами управление передается в программу пользователя,
состояние регистров не определено.
Функции отмеченные (*) в ранних версиях CP/M могут отсутствовать.


 E
                 4. ФУНКЦИИ BDOS     F
     
    Далее приводится описание доступных пользователю функций
 BDOS.
 Операции ввода/вывода осуществляются через БУФЕР ОБМЕНА.
 Системный буфер обмена  расположен по адресу 0080Н. Этот адрес
может быть изменен функцией "УСТАНОВИТЬ  АДРЕС  БУФЕРА  ОБМЕНА"
  (ФУНКЦИЯ 26).
Все операции с каталогом выполняются в резервной области
таким образом не оказывают влияния на буфер обмена за исключением
функции "ПОИСК  ПЕРВОГО" и "ПОИСК СЛЕДУЮЩЕГО".
 E
      4.1.    ФУНКЦИЯ 0: ПРОЦЕДУРА "ГОРЯЧИЙ СТАРТ"   F
     
         ВХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР С: 00Н

Процедура "ГОРЯЧИЙ СТАРТ" перезагружает в ОЗУ CCP и BDOS и
передает управление операционной системе на уровень CCP.                                                                        ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪ ОЛЬНЫЙ ВВОД    F
Действие этой функции эквивалентно безусловному пореходу
по адресу 0000H.

 E
      4.2     ФУНКЦИЯ 1: КОНСОЛЬНЫЙ ВВОД  F

     ВХОДНЫЕ ПАРАМЕТРЫ:         РЕГИСТР С: 01H

     ВЫХОДНЫЕ ПАРАМЕТРЫ:        РЕГИСТР А: КОД СИМВОЛА

   Функция вводит с клавиатуры символ в регистр А. Печатные символы
и символы CR, LF, BSP(возврат на шаг) выводятся с эхом на экран.
Пока символ не будет введен  с консоли, BDOS не  возвращает
управление в вызывающую программу.
 E
      4.3.    ФУНКЦИЯ 2: ВЫВОД СИМВОЛА НА КОНСОЛЬ  F

     ВХОДНЫЕ ПАРАМЕТРЫ:         РЕГИСТР С: 02Н
     
                                РЕГИСТР Е: КОД ВЫВОДИМОГО СИМВОЛА

   Заданный символ выводится на экран, анологично функции
"КОНСОЛЬНЫЙ   ВВОД"  осуществляется обработка управляющих
символов ^I, ^S и ^P.

 E
      4.4.    ФУНКЦИЯ 3: ВВОД СИМВОЛА С ЛОГИЧЕСКОГО УСТРОЙСТВА RDR  F

      ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР С: 03Н
     
      ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР A: КОД ВВЕДЕННОГО СИМВОЛА

  Функция вводит символ с логического устройства RDR и момещает
его код в регистр A. Лишь после этого управление передается
в вызывающую программу.

 E
      4.5.    ФУНКЦИЯ 4: ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО PUN.  F
     
             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 04H
     
                     РЕГИСТР: КОД ВЫВОДИМОГО СИМВОЛА

 Эта функция выводит символ, код которого находится в регистре A
на  логическое устройство PUN.

 E
      4.6.    ФУНКЦИЯ 5: ВЫВОД СИМВОЛА НА ЛОГИЧЕСКОЕ УСТРОЙСТВО LST   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 05H
     
                     РЕГИСТР: КОД ВЫВОДИМОГО СИМВОЛА

 Эта функция выводит символ, код которого задается в
регистре  Е  на  LST.

 E
      4.7.    ФУНКЦИЯ 6: ВВОД/ВЫВОД СИМВОЛА С КОНСОЛИ БЕЗ ЭХА  F

               ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 06H
     
                     РЕГИСТР: 0FFH или 0FEH   - при вводе
                      или  код выводимого символа - при выводе

ВХОД::   если в регистре Е задано 0FFH  (ввод символа без эха /
опрос статуса), то в регистре А возвращается:
     
             - 0, если консоль не готова к вводу символа;
             - введенный символ, в случае готовности консоли.

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

 Если в регистре Е задан код, отличный от 0FEH или 0FFH,
то  предпологается, что это код выводимого символа.
При использовании данной функции никаких действий по редак-
тированию при вводе соответствующих управляющих символов не
производится (СРАВНИТЕ С ФУНКЦИЕЙ 10).

 E
      4.8.    ФУНКЦИЯ 7: ПОЛУЧИТЬ БАЙТ НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ)  F

          ВХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР C: 07H

          ВЫХОДНЫЕ ПАРАМЕТРЫ: РЕГИСТР A: ЗНАЧЕНИЕ БНУ
     
 Эта  функция возвращает текущее значение БНУ в регистре A   [1].

  E
      4.9.    ФУНКЦИЯ 8: УСТАНОВКА БАЙТА НАЗНАЧЕНИЯ УСТРОЙСТВ (БНУ)   F
     
              ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 08H
     
                                    РЕГИСТР Е: НОВОЕ ЗНАЧЕНИЕ БНУ
     
Эта функция меняет системное значение БНУ на значение,
заданное в  регистре.

 E
      4.10.    ФУНКЦИЯ 9: ВЫВОД СИМВОЛЬНОЙ СТРОКИ    F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C:   09H
     
                     РЕГИСТРЫ DE: АДРЕС ВЫВОДИМОЙ СТРОКИ

       Эта   функция выводит на консоль символьную строку,
находящуюся по адресу, указанному в DE. Строка должна заканчиваться
символом  $, который сам не выводится, а является признаком  конца
строки. При выполнении этой функции осуществляется проверка на
управляющие символы ^S,^P,^I.

 E
      4.11.    ФУНКЦИЯ 10: ЧТЕНИЕ В КОНСОЛЬНЫЙ БУФЕР  F
     
     
        ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C:  0AH

                               РЕГИСТР DE: АДРЕС БУФЕРА
     
        ВЫХОДНЫЕ ПАРАМЕТРЫ:    ВВЕДЕННЫЕ СИМВОЛЫ В  БУФЕРЕ
     
   Эта функция читает набираемую на консоли
последовательность символов (строку) в буфер по адресу,
указанному  в  регистр. паре DE.

                Буфер для чтения имеет следующий формат:
   DE:
     
           !--!--!--!--!--!----------------------------!--!--
           !mx!nc!c1!c2!c3!    .   .   .      .   .    !??!
           !--!--!--!--!--!----------------------------!--!--
     
     
             ГДЕ

"mx"        - МАКСИМАЛЬНОЕ ЧИСЛО СИМВОЛОВ, КОТОРЫЕ МОГУТ БЫТЬ ВВЕДЕНЫ
              В ДАННЫЙ БУФЕР, ЗАДАЕТСЯ ПОЛЬЗОВАТЕЛЕМ (ОТ 1 ДО 255);
"nc"        - ЧИСЛО ПРОЧИТАННЫХ СИМВОЛОВ, ОПРЕДЕЛЯЕТСЯ ФУНКЦИЕЙ 10;
С1, С2, ... - СИМВОЛЫ, ПРОЧИТАННЫЕ С КОНСОЛИ. СИМВОЛЫ "???"... ИЗО-
     
     
             ВЫХОД ИЗ ФУНКЦИИ ПРОИСХОДИТ:
     
             - при вводе управляющего символа CR или LF;
             - при вводе максимального числа символов.

    В  процессе чтения набираемой строки содержимое буфера
может быть отредактировано  путем ввода  следующих управляющих
символов:

^C     - ВЫЗОВ ПРОЦЕДУРЫ "ГОРЯЧИЙ СТАРТ" (ЕСЛИ ^С В НАЧАЛЕ СТРОКИ);
^E     - ВВОД СЛЕДУЮЩЕГО СИМВОЛА С НОВОЙ СТРОКИ (CR LF);
^J     - ВЛЕЧЕТ ВЫХОД ИЗ ФУНКЦИИ (CR);
^M     - ВЛЕЧЕТ ВЫХОД ИЗ ФУНКЦИИ (LF);
^P     - УСТАНОВКА/СНЯТИЕ РЕЖИМА ПАРАЛЛЕЛЬНОЙ ПЕЧАТИ;
^R     - ВЫВОД ТЕКУЩЕГО ОТРЕДАКТИРОВАННОГО СОДЕРЖИМОГО КОНСОЛЬНОГО БУФЕРА;
^U     - СТИРАНИЕ КОНСОЛЬНОГО БУФЕРА И ПЕРЕВОД СТРОКИ НА ЭКРАНЕ
        (СТЕРТЫЕ СИМВОЛЫ СОХРАНЯЮТСЯ НА ЭКРАНЕ);
DEL    - СТИРАНИЕ ОДНОГО СИМВОЛА ИЗ КОНСОЛЬНОГО БУФЕРА И ДУБЛИРОВАНИЕ
         ЕГО НА ЭКРАНЕ;
^X     - СТИРАНИЕ КОНСОЛЬНОГО БУФЕРА И ВВЕДЕННОЙ СТРОКИ НА ЭКРАНЕ И
         ВОЗВРАТ КУРСОРА В ТУ ПОЗИЦИЮ СТРОКИ, В КОТОРОЙ БЫЛ ОКОНЧЕН
         ЗАПРОС НА ВВОД КОНСОЛЬНОГО БУФЕРА.
     

 E
      4.12.    ФУНКЦИЯ 11: ОПРОС СТАТУСА КОНСОЛИ.  F
     
           ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C:= 0BH

           ВЫХОДНЫЕ ПАРАМЕТРЫ: РЕГИСТР A: СТАТУС КОНСОЛИ

    Функция опроса статуса консоли позволяет проверить факт
ввода сисмвола с консоли. Если символ введен, в регистре  A
возвращается значение 01Н. В противном случае возвращается 0.

 E
       -      ФУНКЦИЯ 12:  Запрос номера версии  F

         Вход:  Регистр C:= 0CH
         Выход : номер версии в рег. паре HL (0022).


 E
       -     ФУНКЦИЯ 13:  Сброс дискетной системы   F


                    Вход:  Регистр C:= 0DH

***************************
;    В  пп. 4.13-4.34  описаны функции BDOS,  осуществляющие
;    доступ к файлам на дисках.
;    Описания структуры дисков, каталога,
;    файлов, блока управления файлом (БУФ), файловой ссылки, системного
;    буфера обмена (СБО) приведены в разделе 5.



 E
      4.13    Функция  14     Активизировать диск     F


         Входные параметры:  регистр C:=0EH

                             регистр:= номер диска

 E
      4.14   Функция  15    Открыть файл      F


         Входные параметр: регистр C:=0FH

                                 DE:= адрес буфера

         Выходные знасения: регистр A:= индекс описателя

  Функция используется для записи в БУФ информации о размещении
заданного файла. Перед обращением программист должен заполнить
с 0 по 12 байт буфера, то есть задать номер диска, имя и тип файла
и номер открываемого экстента (обычно открывается нулевой экстент).
Описатели в каталоге диска просматриваются на совпадение с 1-12 по-
зициями БУФ, адрес которого указан в регистре DE.
  Если найден совпадающий описатель, то информация о размещении
экстента файла копируется из описателя в соответствующие байты
БУФ и в регистре А возвращается индекс найденного описателя.
  Если совпадающий описатель не найден, то в регистре А возвра-
-щается 0FFH.
 Таким образом ОТКРЫТИЕ ФАЙЛА обеспечивает доступ к нему
для всех операций.
При последовательном обращении к файлу, поле текущего номера
записи (байт 32 БУФ) должно содержать 0.
     

 E
      4.15.    ФУНКЦИЯ 16: ЗАКРЫТИЕ ФАЙЛА   F

             ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C := 10H
     
                                    РЕГИСТР DE:= АДРЕСС БУФ
     
             ВЫХОДНЫЕ ЗНАЧЕНИЯ:     РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

   Функция осуществляет запись текущей информации из БУФ в
соответствующий описатель файла в каталоге диска. При успешном заверше-
нии операции в регистре А возвращается индекс описателя в записи
каталога. В противном случае в регистре А возвращаетсяFH.
При использовании только чтения закрывать файл необязательно.
 Если использовалась операция записи в файл, то выполнение
функции  "ЗАКРЫТИЕ  ФАЙЛА" обязательно для занесения полной информации
     о файле в каталог диска .

 E
      4.16.    ФУНКЦИЯ 17: ПОИСК ПЕРВОГО   F
     
             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C:= 11H
     
                        РЕГИСТР DE:= АДРЕС БУФ
     
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ
     
   Функция осуществляет поиск в каталоге заданного диска
первого описателя, соответствующего заданному БУФ.
 Если такой описатель найден, то в регистре А возвращается
его индекс а в буфере обмена - запись каталога, содержащая найденный
описатель. Таким образом относительный начальный адрес найденного
описателя в буфере обмена  будет равен  А*32.
   Если соответствующий описатель не найден, то в регистре А
возвращается FH.
 Если БУФ в позиции, соответствующий номеру диска, содержит
символ "?" (код  3FH), то выбирается  первый  (запомненный или
свободный)  описатель каталога активизированного диска. Этот случай
используется для просмотра текущего состояния всех описателей
каталога активизированного диска (СМ. ФУНКЦИЮ 18).
     
 E
      4.17.    ФУНКЦИЯ 18: ПОИСК СЛЕДУЮЩЕГО   F
     
             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 12H
     
                                  РЕГИСТР DE:= АДРЕС БУФ
     
            ВЫХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

   Функция "ПОИСК СЛЕДУЮЩЕГО" аналогична функции "ПОИСК ПЕРВOГO",
за исключением того, что просмотр каталога начинается с послед-
него описателя,  совпадающего с  заданным БУФ.
Если соответствующий элемент не найден, в регистре А возвра-
-щается  0FFH.

 E
      4.18.    ФУНКЦИЯ 19: СТИРАНИЕ ФАЙЛА          F
     
             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C:= 13H

                                  РЕГИСТР DE:= АДРЕС БУФ
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

  Функция стирает в каталоге диска все описатели файла (???)
имя  которого задано в БУФ. Поле номера диска не может содержать
   символ "?" (код 3FH).
Если соответствующий описатель найден в каталоге, в регистре
 А возвращается его индекс в записи каталога.
  Если соответствующий описатель не найден в каталоге, в
регистре  А  возвращаетсяFH.
     
 E
      4.19.    ФУНКЦИЯ 20: ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C: 14H
     
                                    РЕГИСТР DE: АДРЕС БУФ
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

Функция вводит 128 байтную запись из файла, заданного в
БУФ, в буффер обмена. Заданный БУФ должен содержать информацию
о размещении файла на диске, для чего необходимо предварительно
открыть  файл (ФУНКЦИЯ 15).
Из текущего экстента вводится запись с текущим номером, и
к текущему номеру записи автоматически прибавляется единица,
то есть устанавливается номер следующей записи.
Если поле текущего номера записи переполняется, то следующая
операция чтения автоматически открывает следующий экстент и поле
текущего номера записи обнуляется.
Если операция чтения прошла успешно, в регистре А возвращается
00H. В противном случае содержимое регистра А отличается от 0.

 E
      4.20.    ФУНКЦИЯ 21: ПОСЛЕДОВАТЕЛЬНАЯ ЗАПИСЬ   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C: 15H

                                    РЕГИСТР DE: АДРЕС БУФ
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ: РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ
     
 Функция заносит 128-байиную запись из буфера обмена в файл,
имя которого указано в БУФ, он должен содержать информацию о размещении
файла, для чего необходимо предварительно открыть или создать  файл
(ФУНКЦИИ 15 или 22). Запись помещается в текущий экстент с текущим
номером и к полю текущего номера записи прибавляется единица, то
есть устанавливается номер следующей записи. Если поле текущего
номера записи переполняется, то для следующей операции записи авто-
тически открывается следующий экстент и поле текущего номера записи
устанавливается в 0.
Операция записи может происходить на ранее заполненном
файле, в зтом случае вновь занесенные записи помещаются в те же
блоки, что и ранне существовавшие в файле.
Если операция записи прошла успешно, то в регистре A возвращается 0.
В противном случае содержимое регистра А отлично от нуля.

      
 E
      4.21.    ФУНКЦИЯ 22: СОЗДАНИЕ ФАЙЛА   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C: 16H

                                    РЕГИСТР DE: АДРЕС БУФ
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

  Функция заполняет нулями байты с 13 по 31 БУФ и записывает в
каталог диска описатель файла, формируя его по заданному БУФ. Таким
образом, создание файла так же, как и функция "ОТКРЫТИЕ ФАЙЛА" обес-
печивает доступ к файлу для всех операций.
Пользователь должен предварительно заполнить с 0 по 12 байты
БУФ, то есть задать номер диска, имя и тип файла, не забывая при
этом, что дублирование имен файла на одном диске не допускается.
Если операция прошла успешно, в регистре A возвращается
индекс описателя  в записи каталога. Если в каталоге нет свободного
места, то в регистре А возвращаетсяFH.
     
 E
      4.22.    ФУНКЦИЯ 23: ПЕРЕИМЕНОВАНИЕ ФАЙЛА   F
     

             ВХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР C: 17H
     
                        РЕГИСТР DE: АДРЕС БУФ

             ВЫХОДНЫЕ ПАРАМЕТРЫ: РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ

    Функция заменяет имя файла, заданное в байтах с 0 по 12
БУФ, адрес которого задан в DЕ, на имя файла, заданное в байтах с 16
по 28 БУФ. Номер диска задается только в нулевом байте БУФ, байт 16
фсегда содержит 0.
Если переименование прошло удачно, в регистре А возвращается
индекс описателя в каталоге, в противном случае -FH.


 E
  4.23.    ФУНКЦИЯ 24: ПОЛУЧИТЬ ВЕКТОР УСТАНОВЛЕННЫХ ДИСКОВ    F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ: РЕГИСТР C: 18H
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:
             РЕГИСТР HL: Вектор действующих дисковых устройств

Вектор установленных дисков представляет собой 16 битную величину,
возвращается в паре HL. Первый значащий бит регистра L
соответствует диску  A, второй бит - диску В. Нулевое значение бита
означает, что соответсивующий диск не установлен, единица означает,
что диск установлен в результате выполнения функции "АКТИВИЗАЦИЯ ДИ-
СКА" или одной из операциий над файлом с явным заданием номера
в поле номера диска.
     
 E
      4.24.    ФУНКЦИЯ 25: ПОЛУЧИТЬ НОМЕР АКТИВИЗИРОВАННОГО ДИСКА   F

     
             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 19H
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:
                    РЕГИСТР A: Номер акктивизированого диска
     
    Функция возвращает в регистре А номер активизированного диска
А=00 соответствует диску А, А=01 - диску В.
     
 E
      4.25.    ФУНКЦИЯ 26: УСТАНОВИТЬ АДРЕС БУФЕРА ОБМЕНА   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 1AH
     
                                 РЕГИСТР DE: АДРЕС БУФЕРА ОБМЕНА
     
  Буфер обмена представляет собой 128 байтов оперативной памяти
через которые осуществляется ввод/вывод записей файлов. Процедурой
"ГОРЯЧИЙ/ХОЛОДНЫЙ СТАРТ" адрес буфера обмена устанавливается 0080H.
Функция "УСТАНОВИТЬ АДРЕС БУФЕРА ОБМЕНА" используется для
изменения адреса системного буфера обмена на адрес, заданный в
паре  DE.  Вновь установленный адрес буфера обмена сохраняется до тех
пор пока он не будет изменен либо функцией "УСТАНОВИТЬ АДРЕС БУФЕРА
ОБМЕНА", либо процедурой "ГОРЯЧИЙ/ХОЛОДНЫЙ СТАРТ".
     
      4.26.    ФУНКЦИЯ 27: ПОЛУЧИТЬ АДРЕС ВЕКТОРА РАЗМЕЩЕНИЯ БЛОКОВ
     
     
           ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C: 18H
     
           ВЫХОДНЫЕ ПАРАМЕТРЫ:  HL= Адрес вектора


   ВЕКТОР РАЗМЕЩЕНИЯ БЛОКОВ ФОРМИРУЕТСЯ В ОСНОВНОЙ ПАМЯТИ ДЛЯ
КАЖДОГО  УСТАНОВЛЕННОГО ДИСКА. РАЗЛИЧНЫЕ СИСТЕМНЫЕ ПРОГРАММЫ
ИСПОЛЬЗУЮТ ИНФОРМАЦИЮ, СОДЕРЖАЩУЮСЯ В ВЕКТОРЕ РАЗМЕЩЕНИЯ БЛОКОВ ДЛЯ
ОПРЕДЕЛЕНИЯ ВЕЛИЧИНЫ СВОБОДНОЙ ПАМЯТИ НА ДИСКЕ. ФУНКЦИЯ ВОЗВРАЩАЕТ В
РЕГИСТРАХ HL НАЧАЛЬНЫЙ АДРЕС ВЕКТОРА РАЗМЕЩЕНИЯ БЛОКОВ ДЛЯ АКТИВИЗИР-
-ОВАННОГО ДИСКА.

 E
      4.27.    ФУНКЦИЯ 28: ЗАПИСАТЬ КЛЮЧ ЗАЩИТЫ ДИСКА   F
     
             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 1CH

  Функция устанавливает временное запрещение записи на активизи-
рованный диск. В результате вплоть до выполнения
"ГОРЯЧЕГО/ХОЛОДНОГО СТАРТА" любая попытка записи на активизированный
диск вызовет сообщение об ошибке:

                   BDOSRR ON X: R/O
     
(ошибка ввода/вывода на диске X: только чтение , где X - имя диска)
     
 E
      4.28.    ФУНКЦИЯ 29: ПОЛУЧИТЬ ВЕКТОР R/O  F
     

       ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 1DH

       ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТРЫ HL: ЗНАЧЕНИЕ ВЕКТОРА R/O.
     
  Функция возвращает в паре регистров HL битовый вектор, указы-
фающий на диски, для которых установлен бит R/O (только чтение).
Младший значащий бит соответствует диску A, второй - диску В.

 E
      4.29.    ФУНКЦИЯ 30:  УСТАНОВИТЬ ИНДИКАТОР ДОСТУПА ФАЙЛА   F
     
     
             ВХОДНЫЕ ПАРАМЕТРЫ:       РЕГИСТР C: 1EH

                                      РЕГИСТР DE: АДРЕС БУФ
     
             ВЫХОДНОЕ ЗНАЧЕНИЕ:   РЕГИСТР A: ИНДЕКС ОПИСАТЕЛЯ
     
    Функция позволяет програмно работать с индикатором доступа
файла. Для файла имя которого задано в БУФ, устанавливается индика-
тор доступа R/O (только чтение), если старший бит байта 9 БУФ
содержит 1, или R/W (чтение/запись), если этот бит содержит 0.

  E
      4.30.    ФУНКЦИЯ 33: ПРЯМОЕ ЧТЕНИЕ    F

             ВХОДНЫЕ ПАРАМЕТРЫ:      РЕГИСТР C: 21H
     
                                     РЕГИСТР DE: АДРЕС БУФ
     
             ВЫХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР A: КОД ОШИБКИ
     
    Прямое чтение аналогично последовательному чтению файла,
за исключением того, что прямое чтение позволяет вводить записи с
произвольным указанным номером. Для обращения к функции необходимо
предварительно открыть файл и занести номер записи в поле номера записи.
  При прямом доступе БУФ (байты 33 и 34), байт 35 должен быть предвари-
тельно обнулен, так как ненулевое значение этого байта означает
переполнение диска.
  В регистре А возвращается либо код ошибки (возможные коды
ошибок приведены ниже ), либо 00, что означает благополучное
завершение операции. В этом случае в буфере обмена содержится
введенная запись.
  В отличие от последовательного чтения при прямом чтении
после ввода записи поле номера записи прямого доступа в БУФ не
изменяется и повторение прямого чтения вызовет повторный ввод записи с
тем же номером.
Далее приводятся коды ошибок, возвращаемые в регистре А
     после операции прямого чтения:
     
             01        - ЧТЕНИЕ ОТСУТСТВУЮЩИХ ЗАПИСЕЙ;
             02        - НЕ ИСПОЛЬЗУЕТСЯ ПРИ ПРЯМОМ ДОСТУПЕ;
             03        - ОШИБКА ПРИ ЗАКРЫТИИ ТЕКУЩЕГО ЭКСТЕНТА;
             04        - ПОПЫТКА ОТКРЫТЬ НЕСУЩЕСТВУЮЩИЙ ЭКСТЕНТ;
             05        - НЕ ИСПОЛЬЗУЕТСЯ ПРИ ПРЯМОМ ЧТЕНИИ;
             06        - ФИЗИЧЕСКИЙ КОНЕЦ ДИСКА.

    Коды ошибок 01 и 04 встречаются в случае,когда при операции
прямого чтения достигнут блок данных, который до этого не был
записан, или экстент, который не был до этого оргонизован.
    Код ошибки 03 обычно не появляется при нормальной работе
системы. Она может быть снята при помощи повторного чтения или
повторного открытия.
    Код ошибки 06 встречается в случае, если 35-й байт БУФ не
равен нулю.

 E
      4.31.    ФУНКЦИЯ 34: ПРЯМАЯ ЗАПИСЬ     F

             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 22H
     
                                  РЕГИСТР DE: АДРЕС БУФ

             ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР A: КОД ОШИБКИ

  Функция записывает на диск данные, НАХОДЯЩИЕСЯ в буфере обмена
Если экстент на диске или блок данных, в которые производится
запись, еще не отведены, осуществляется выделение области на диске.
как и при прямом чтении, номер записи (33 и 34 байт БУФ) не меняется
в результате выполнения прямой записи. Текущий номер экстента и теку-
щий номер записи в экстенте вычисляются по заданному номеру прямой
записи и записываются в соответствующие байты БУФ.
Коды ошибок, возвращаемых при прямой записи, идентичны кодам
ошибок при прямом чтении кроме кода 05, который означает, что новый
экстент не может быть создан из-за переполнения каталога...?

 E
      4.32.    ФУНКЦИЯ 35: ВЫЧИСЛИТЬ РАЗМЕР ФАЙЛА  F

             ВХОДНЫЕ ПАРАМЕТРЫ:    РЕГИСТР C: 23H

                                   РЕГИСТР DE: АДРЕС БУФ
             ВЫХОДНЫЕ ПАРАМЕТРЫ:
             Установка поля номера записи при прямом доступе
     
   Функция вычисляет размер файла, имя которого задано в БУФ, и
возвращает его в байтах 33,34 и 35 БУФ. Возвращаемый размер файла
на самом деле является продвинутым номером последней записи файла.
в конце существующего файла могут быть добавлены записи. Для
этого  следует:
     
- ПОЛУЧИТЬ ПРОДВИНУТЫЙ НОМЕР ПОСЛЕДНЕЙ ЗАПИСИ ФАЙЛА ПРИ ПОМОЩИ ФУНКЦИИ 35;
- ВЫПОЛНИТЬ ФУНКЦИЮ "ПРЯМАЯ ЗАПИСЬ" С ЭТИМ НОМЕРОМ;
- ЗАТЕМ ВЫПОЛНЯТЬ ФУНКЦИЮ "ПРЯМАЯ ЗАПИСЬ" НУЖНОЕ ЧИСЛО РАЗ, УВЕЛИЧИ-
  ВАЯ КАЖДЫЙ РАЗ НОМЕР ЗАПИСИ НА ЕДИНИЦУ.
     
   Если файл записан последовательно, действительный размер файла
совпадает с числом записейв нем. Если же файл создан в режиме
прямого доступа,и в области размещения файла существуют "дырки", то
фактическое число записей меньше, чем указано в его размере.


 E
 4.33.    ФУНКЦИЯ 36: УСТАНОВИТЬ НОМЕР ЗАПИСИ ДЛЯ ПРЯМОГО ДОСТУПА   F

             ВХОДНЫЕ ПАРАМЕТРЫ:     РЕГИСТР C: 24H
     
                                     РЕГИСТР DE: АДРЕС БУФ

     ВЫХОДНЫЕ ПАРАМЕТРЫ:    УСТАНОВКА ПОЛЯ НОМЕРА ПРЯМОЙ ЗАПИСИ
     
  Функция устанавливает номер записи прямого доступа (байты 33
и 34) по номеру текущего экстента и номеру текущей записи.
Функция применяется при переключении с режима последовательно-
го доступа в режим прямого доступа. К файлу осуществляется последо-
вательный доступ до соответствующей записи, вызывается функция 36,
устанавливающая номер прямой записи, и, начиная с выбранной точки
файла, выполняются операции прямого чтения или записи.


 E
        *      ФУНКЦИЯ 37: Сброс приводов    F

                              регистр C:= 25H
                              регистр DE:= метка сброса

                  возврат: A: 00H

 E
      4.34.    ФУНКЦИЯ 40: ПРЯМАЯ ЗАПИСЬ С ЗАПОЛНЕНИЕМ НУЛЯМИ   F

             ВХОДНЫЕ ПАРАМЕТРЫ:   РЕГИСТР C: 28H
     
                                  РЕГИСТР DE: АДРЕС БУФ

             ВЫХОДНЫЕ ПАРАМЕТРЫ:  РЕГИСТР A: КОД ОШИБКИ
     
   Функция аналогична прямой записи за исключением того, что
при выделении нового блока, он заполняется нулями перед записью в
него данных.
 E
      5. СТРУКТУРА ФАЙЛОВ ОС CP/M    F

В  ОС CP/M под диском подразумевается логическое устройство,
представляющее собой некоторую внешнюю запоминающую среду с прямым
доступом, допускающую как чтение, так и запись.
 Диск логически разбивается на три области:

             - РЕЗЕРВИРУЕМУЮ ОБЛАСТЬ, СОДЕРЖАЩУЮ CCP и BDOS;
             - ОБЛАСТЬ КАТАЛОГА;
             - ОБЛАСТЬ ФАЙЛОВ.
     
Пространство диска, отведенное под каталог и файлы, организовано
блоками постоянной длины.  Каждый блок состоит из кратного 8-ми
числа записей.
BDOS осуществляет обмен с диском по записям. Длина записи
составляет 128 байт. Каждый файл состоит из последовательности
записей. Нумерация записей начинается с 0.
Несколько начальных блоков резервируются под каталог диска.
 Каталог состоит из описателей, содержащих имена файлов и информации
о размещении файлов расположенных на диске.
 Каждый описатель определяет область диска (ЭКСТЕНТ), отведен-
ную  под данный файл или часть файла. Длина описателя составляет 32
байта.  Описатель  содержит имя и тип файла, номер экстента, число
записей в экстенте  и список номеров блоков, отведенных под данный
экстент. Структура описателя совпадает со структурой 0-31 байтов
блока управления файлом (БУФ) (см. подраздел 5.2). Пустые описатели
 содержат  код 5H в нулевом байте.
   4 описателя блокируются в одну запись каталога. Номер описателя
в записи называется индексом описателя и принимает значения от 0
     до 3.
 Файлы на диске могут состоять из одного или нескольких экстен-
тов,  и, таким образом, иметь один или несколько описателей  в
катадлоге. Каждый экстент файла доступен через его описатель в режиме
как последовательного, так и прямого ввода/вывода.
Файлы  в ОС CP/M могут содержать любое число записей от нуля
  до полного использования емкости диска.
 E
      5.1.    ФАЙЛОВАЯ ССЫЛКА     F
     
  ОС  CP/M работает с поименованными файлами. Полное имя файла
состоит из имени диска, имени файла и типа файла.
Имя диска используется для указания требуемого диска и принимает
значение А или В.
Имя файла содержит от 1 до 8 символов не равных ПРОБЕЛУ.
Тип  файла  содержит  от   1 до   3  символов и определяет
назначение файла. Собственно BDOS проверяет только два типа: COM и SUB,
остальные ему безразличны и определяются соотв. программами.
Оно, это расширение в простых случаях, можно вообще не применять,
тогда вCB оно заменяется пробелами.
Далее приведены типы файлов, обычно используемые ::
   E
     
          ТИП     НАЗНАЧЕНИЕ ФАЙЛА            F
        -------  --------------------------------------------------

          Мac     ИСХОДНЫЙ ТЕКСТ НА ЯЗЫКЕ МАКРОАССЕМБЛЕРА
          Bas     ИСХОДНЫЙ ТЕКСТ НА ЯЗЫКЕ БЕЙСИК
          PAS     ИСХОДНЫЙ ТЕКСТ НА ЯЗЫКЕ паскаль
          C       ИСХОДНЫЙ ТЕКСТ НА ЯЗЫКЕ < Cи >
          Plm     ИСХОДНЫЙ ТЕКСТ НА ЯЗЫКЕ ПЛ/М
          Prn     ПРОТОКОЛ КОМПИЛЯЦИИ/АССЕМБЛИРОВАНИЯ
          Hex     ШЕСТНАДЦАТЕРИЧНЫЙ МАШИННЫЙ КОД В СИМВОЛЬНОМ ВИДЕ
          Com     МАШИННЫЕ КОДЫ ПРОГРАММЫ В АБСОЛЮТНЫХ АДРЕСАХ (ИМЯ ТАКИХ
                  ФАЙЛОВ БЕЗ УКАЗАНИЯ ТИПА ЗАДАЕТСЯ В КОМАНДНОЙ СТРОКЕ CCP)
          Rel     ПЕРЕМЕЩАЕМЫЕ МАШИННЫЕ КОДЫ
          Bak     ЗАПАСНОЙ ИСХОДНЫЙ ТЕКСТ РЕДАКТОРА
          Sub     командный файл CCP.
          LIB     библиотечный, ИСХОДНЫЙ ТЕКСТ РЕДАКТОРА
          $$$     ПРОМЕЖУТОЧНЫЙ ИСХОДНЫЙ ТЕКСТ РЕДАКТОРА

  Для групповых операций над файлами используется файловая ссылка
ФАЙЛОВАЯ ССЫЛКА представляет собой указание номера диска, псевдоимени
файла и псевдотипа файла в буф. и служит образцом, по которому
осуществляется поиск соответствующих описателей в каталоге ДИСКА.
Описатель удовлетворяет образцу, если все символы, входящие в
имя  и  тип файла, совпадают с соответствующими символами  в
псевдоимени и псевдотипе файла, за исключением позиций, содержащих
символ "?"(код 3FH).
 E
      5.2.      БЛОК УПРАВЛЕНИЯ ФАЙЛОМ (БУФ)  F

            или иначеCB (ile control block )

  Блок управления файлом представляет собой область ОЗУ, созда-
ваемую пользователем и компиляторами для организации работы с файлами.
Для работы функций BDOS необходимо, чтобы каждый файл, к которому
осуществляется доступ, имел соответствующий буф., содержащий информацию
об  имени и размещении файла.
  Буф. состоит из 33 байт в случае последовательного доступа
и  из 36  байт в случае прямого доступа.
 Формат первых 32 байтов буф. совпадает с форматом описателя
     каталога.  Ниже приведена структура БУФ :
     
 --!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---
 dr!1!2! //!8! t1! t2! t3!x! s1! s2! rc! d0! //! dn! cr! r0! r1! r2
 --!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---
 00  01  02 ...  08  09  10  11  12  13  14  15  16 ...  31  32  33  34  35
 ---------------------------------------------------------------------------

             ГДЕ
     
dr - номер диска, принимает значения от 0 до при этом
       0 - соответствует активизированному диску,
       1 - соответствует диску с именем А,
       2 -               диску с именем B... и т.д.
f1...f8  - имя файла, состоящее из 1-8 больших латинских букв/цифр
           с нулевыми старшими битами. Имена короче 8 символов
           дополняются справа пробелами.
t1 t2 t3 - тип файла, состоящий из 1-3 больших латинских букв/цифр с
           нулевыми старшими битами. Тип, состоящий менее чем из 3
           символов дополняется справа пробелами.
           Старший бит поля Т1 используется как индикатор доступа
           файла. Если он равен 1, то файл находится в состоянии R/O
           (только чтение), если - 0, то файл находится в состоянии
           R/W (чтение/запись);
           старшие биты полей Т2 и Т3 не используются, зарезервированы
           системой;
ex      -  текущий номер экстента, пользователем обычно устанавливается
           в 0;
s1      -  зарезервировано для внутреннего использования;
s2      -  зарезервировано для внутреннего использования;
rc      -  число записей в текущем экстенте, принимает значение от 0
           до 128;
d0...dn -  номера блоков в экстенте, заполняются системой;
cr      -  текущий номер записи в зкстенте, в операциях последова-
           тельного чтения/записи пользователем обычно устанавли-
           вается в 0;
r0,r1,r2 - номер записи при прямом доступе, r2 - байт переполнения,
           r0,r1 - содержат 16-битное значение с младшим байтом в r0
           и старшим в r1.

  Для осуществления доступа к файлам программист должен заполнить
с 0  по 12 байты БУФ, т.е. указать номер диска, имя и тип файла и
номер открываемого создаваемого экстента. Затем необходимо выполнить
функцию "ОТКРЫТИЕ ФАЙЛА" или "СОЗДАНИЕ ФАЙЛА" для заполнения остальных
полей БУФ.
  При выполнении поцледующих операций ввода/вывода BDOS коррек-
тирует  содержимое БУФ, осуществляя автоматическое открытие/созданме
и закрытие  текущих экстентов файла.
  По окончании работы с файлом текущая информация из БУФ записыва-
ется в  каталог функцией "ЗАКРЫТИЕ ФАЙЛА".
 E
      6.       СООБЩЕНИЯ ОБ ОШИБКАХ    F

  При работе BDOS может выдавать следующие сообщения об ошибках:

     
   BDOSRR ON X: BAD SECTOR  - ошибка при чтении/записи на диск
   bdosrr on X: select      - несуществует такой диск
   bdosrr on X: R/O         - попытка записи на диск R/O
   bdosrr on X:ile R/O    - прпытка записи в файл R/O

где X- имя диска.

       7.     Перечень ссылочных документов.


 1. Операционная система CP/M . Описание программиста.

 2. М.Уэйт, Дж. Ангермейер    Операционная система CP/M.
 перевод (C) 1983 by Mitchell Waite, 4300 west 62nd st INDIANA
                              радио и связь 1986.
                              ББК 32.973     у97
                              УДК 519.68