ОПЕРАЦИОННАЯ СИСТЕМА DX-DOS: ОБЩИЕ СВЕДЕНИЯ.

Самая удачная из попыток разработки новых систем - разработка ОС, получившей впоследствии известность как MS-DOS. История операционной системы MS-DOS, которая получила распространение во всем мире и используется сегодня в количестве, по разным оценкам, от 30 до 50 млн. экземпляров, начинается со скромной системы 86-DOS, написанной в середине 80-хх гг. Т.Петерсоном для компании Seattle Сomрuter Рroduсts.

При создании операционной системы DX-DOS была предпринята попытка в максимальной степени учесть специфику MS-DOS.

Вместе с тем, DX-DOS не является чужеродной для системных вызовов МОНИТОРА. Последнее означает, что DX-DOS поддерживает работу старого программного обеспечения, предназначенного для работы под управлением МОНИТОРА.

DOS перехватывает прерывание EMT 36 (на БК0010), обслуживающее работу магнитофона, и обеспечивает его обработку своими средствами.

Возможности DX-DOS:

  1. Файловая система аналогична MS-DOS, MSX-DOS.
  2. Дисковые операции (буферизация ввода/вывода).
  3. Прямой и последовательный доступ к файлам.
  4. Возможность обработки файлов практически любой длины.
  5. Наличие стандартных внешних устройств. (Эти устройства всегда доступны всем программным средствам)
  6. Обработка пакетных файлов пользователя.
  7. Система функций, доступных программисту.
  8. Наличие переменных окружения DOS.
  9. Обработка дискет различных форматов. (форматы: 160, 180, 320, 360, 400, 640, 720, 800)
  10. Имеется возможность обработки собственного формата диска.
  11. Возможность работы с различными типами дисководов. (Число дорожек определяется при старте DOS)
  12. Возможность подключения новых внешних устройств.
  13. Возможность подключения новых драйверов.
  14. Возможность работать одновременно с несколькими файлами.
  15. Возможно производить чтение из файла и запись в файл одновременно, не закрывая его.
  16. Оригинальный алгоритм позволяет обрабатывать FAT и каталог любого размера.
  17. На БК0011(М) работает без предварительной эмуляции БК0010.
  18. Все модули системы абсолютно перемещаемы.

DX-DOS состоит из 3-х частей:

  1. Системный загрузчик.
  2. Ядро системы (DXDOS.SYS).
  3. Командный процессор (COMMAND.COM).

Системный загрузчик записывается на нулевую дорожку (независимо от того, системная это дискета или нет). Старт системы осуществляется обычным способом, передачей управления по адресу 160000.

Загрузчик определяет формат дискеты и наличие системного файла DXDОS.SYS в первой строке каталога, и загружает его в память. Если файл DXDOS.SYS не обнаружен или имеет место ошибка чтения, выдаётся сообщение:

Non system disk or disk error
(Дискета не системная или ошибка диска)

После загрузки системного файла DXDOS.SYS ему передаётся управление.

Если ПК распознан как БК-0010, проверяется наличие как минимум 8 Кб в области расширенного RAM (диапазон адресов 120000-160000, поиск ведётся с верхних адресов).

Если 8 Кб памяти не обнаружено, выдаётся сообщение:

Fatal error: Cannot allocate memory for DOS.
(Невозможно отвести память под DOS).

На этом загрузка прекращается.

Если обнаружен один дисковод, система генерирует второй псевдодиск, т.е. при обращении к диску B: DOS требует сменить дискету.

В случае нехватки памяти выводится сообщение (только на БК-0010):

Configuration too large for memory.
(Данная конфигурация не помещается в памяти).

При наличии такого диагноза можно рекомендовать следующие действия:

Если обнаружен FCB файла AUTOEXEС.BAT, начинается его выполнение. В противном случае выводится приглашение системы и ожидается ввод команд пользователя.

СПИСОК КОМАНД ПОЛЬЗОВАТЕЛЯ.

1.

DIR <шаблон>

Вывод каталога на стандартное устройство вывода (по умолчанию - экран).
Примеры:

 

DIR

-

вывод всего каталога

 

DIR /W

-

вывод сжатого каталога.

 

DIR /P

-

постраничный вывод каталога.

 

DIR /H

-

вывод с дополнительным выводом скрытых файлов.

 

DIR /F

-

вывод размера свободного пространства на диске

   

Возможна комбинация ключей в любом порядке, кроме ключа F.

 

DIR /P *.TXT

-

вывод файлов типа TXT постранично.

 

DIR P?AB.TXT

-

вывод файлов, в которых на втором месте любая буква.

 

DIR P*.BAT

-

вывод файлов типа TXT, имена которых начинаются с символа 'P'.

 

DIR *.TXT > PRN

-

вывод файлов типа TXT на принтер.

 

DIR > DIR.TXT

-

вывод всего каталога в файл с именем DIR.TXT текущего диска.

 

DIR B:*.TXT

-

вывод файлов типа TXT с диска B:.

   

Возможен вывод по переменной окружения DIRCMD. (см. команду SET).

2.

DEL <шаблон>

или

ERA <шаблон>.

Удаление файлов по шаблону.
Примеры:

 

DEL DIR.TXT

-

удаление файла DIR.TXT.

 

DEL *.TXT

-

удаление файлов типа TXT.

 

DEL *.*

-

удаление всех файлов.

   

При этом DOS переспрашивает - "Вы уверены?".

При желании возможен отказ от выполнения операции.

 

DEL *.* < F.TXT

-

удаление всех файлов без "переспрашивания". (Файл F.TXT должен содержать, по крайней мере, символ Y или N)

3.

TYPE имя файла

Вывод текстового файла (распознаваемые форматы: EDASPS, MSX, MICRO).
Примеры:

 

TYPE DIR.TXT

-

вывод файла DIR.TXT

 

TYPE DIR.TXT > PRN

-

вывод файла на принтер.

4.

REN <шаблон1> <шаблон2>

Переименование файлов шаблона1 по шаблону2.
Примеры:

 

REN DIR.TXT DIR.KAT

-

переименование DIR.TXT в DIR.KAT

 

REN *.TXT *.DOC

-

переименование файлов типа TXT в тип DOC.

5.

VER

вывод версии DOS. Примеры:

 

VER

-

вывод версии на экран.

 

VER > PRN

-

вывод версии на принтер.

 

VER > V.TXT

-

вывод версии в файл V.TXT

6.

CLS

Очистка экрана дисплея.

7.

PAUSE <сообщение>

Приостанавливает работу DOS. Примеры:

 

PAUSE

-

приостановка работы, сопровождаемая выводом текста:

Strike any key to continue... 
(Нажмите любую клавишу для продолжения)
 

PAUSE НАЖМИТЕ ЛЮБУЮ КЛАВИШУ

-

вывод текста, следующего за командой PAUSE с последующей приостановкой работы. (текст на английском не выводится).

8.

ECHO <сообщение>

Вывод сообщения на экран.
Примеры

 

ECHO -----------------------------------------------------

   

-

вывод линии на экран.

 

ECHO OFF

-

запрещение вывода текста команд на экран при выполнении пакетного файла.

 

ECHO ON

-

отмена предыдущей команды.

 

ECHO

-

вывод состояния (ON/OFF) команды ECHO.

9.

REM комментарии

Не выполняющаяся команда. Предназначена для комментариев в пакетном файле.
Пример:

REM производится копирование файлов на диск B:.

10.

SET имя=значение

установка/просмотр/удаление переменных окружения DOS.
Примеры:

 

SET

-

вывод переменных на экран

 

SET > PRN

-

вывод переменных на принтер.

 

SET > F.TXT

-

вывод переменных в файл F.TXT

 

SET DIRCMD=*.TXT

-

установка переменной DIRCMD (для команды DIR).

 

SET DIRCMD=

-

удаление переменной DIRCMD.

11.

COPY <шаблон1> <шаблон2>

Копирование файлов шаблона1 в шаблон2
Примеры:

 

A>COPY A.DOC B:F.TXT

-

копирование файла A.DOC с диска А: на диск В: под именем F.TXT

 

A>COPY *.TXT B:

-

копирование файлов типа TXT на диск В: под теми же именами (Если такие файлы на диске B: имеются они уничтожаются).

 

A>COPY B:*.DOC

-

копирование файлов типа DOC с диска В: на диск A:

 

COPY CON AUTOEXEC.BAT

-

копирование с консоли в файл AUTOEXEC.BAT окончание ввода - СУ+К + возврат каретки.

 

COPY CON PRN

-

копирование с клавиатуры на принтер.

 

COPY *.* NUL

-

копирование всех файлов в нулевое устройство (проверка 'читабельности' файлов).

 

COPY A:*.* B:*.* > A.TXT

-

копирование всего диска А на диск В, (при этом все сообщения перенаправляются в файл A.TXT)

 

COPY A:*.* B:*.* > NUL

-

то же, но никаких сообщений не выводится (они поступают в NUL-устройство).

 

COPY <шаблон1> + <шаблон2> + ... + <шаблон N> <выходной шаблон>

-

склеивание файлов по шаблонам, результат помещается в выходной шаблон. (применять символы групповых операций '?', '*' не рекомендуется, это может привести к неожиданным результатам операции)
Примеры:

 

COPY D1.TXT + D2.TXT + D3.TXT ALL.TXT

-

склеивание файлов D1.TXT, D2.TXT, D3.TXT с последующим помещением результата в файл ALL.TXT.

 

COPY *.TXT + *.DOC *.ALL

-

склеивание файлов типа TXT и DOC в файлы типа ALL (примечание: создаются несколько файлов типа ALL, имя выходного файла формируется из имени шаблона1, при исчерпывании любого входного шаблона склейка прекращается).

 

COPY *.TXT + *.DOC ALL.TXT

-

то же, но создаётся один выходной файл.

 

COPY *.TXT ALL.TXT

-

все файлы типа TXT объединяются в один файл ALL.TXT

 

COPY CON + D.TXT ALL.TXT

-

добавление к началу файла D.TXT текста, введённого с клавиатуры.

 

COPY <шаблон1> + <шаблон2> + ... + <шаблон N>

-

приклеивание к файлу <шаблон1> остальных

 

COPY D.TXT + D.DOC

-

к файлу D.TXT добавляется файл D.DOC.

 

COPY *.TXT + *.DOC

-

к файлам типа TXT добавляются файлы типа DOC

 

COPY D.DOC + CON

-

добавление к файлу D.DOC текста введённого с клавиатуры.

12.

DATE

ввод/просмотр текущей даты.
Примеры:

 

DATE

 

вывод на экран даты и ввод новой.

Если изменения даты не требуется, следует нажать клавишу ввода.

 

DATE > PRN

 

вывод на принтер

 

DATE < F.RRR

 

ввод даты из файла F.RRR

 

DATE > PRN < F.RRR

 

две предыдущие операции объединены.

13.

FORMAT диск:/параметры

Форматирование дисков (внешняя команда). Параметры:

   

/1

Форматирование одной стороны дискеты.

   

/4

На 80-ти дорожечном дисководе дискета форматируется на 40 дорожек.

   

/8

При форматировании на каждой дорожке размещается 8 секторов.

   

/9

При форматировании на каждой дорожке размещается 9 секторов.

   

/B

После форматирования на диске резервируется место для записи системы.

   

/S

После форматирования на диск переносится система, диск становится системным.

   

/?

Вывод справочной информации.

   

/D

При форматировании используется нестандартный драйвер.

   

Примеры:

 

FORMAT A:

-

форматирование дискеты на максимальный размер. (на 80-ти дорожечном дисководе 800 кб, 80 дорожек и 10 секторов на дорожку.

На 40-а дорожечном дисководе – 400 кб, 40 дорожек и 10 секторов на дорожку)

 

FORMAT A:/4/9

-

форматирование дискеты на 360 кб.

 

FORMAT A:/4/8/S

-

форматирование дискеты на 320 кб, на диск переносится система.

 

FOPMAT B:/S/1/4/8

-

форматирование диска на 160 кб, дискета становится системной.

 

FORMAT /? > PRN

-

печать инструкции на принтере

14.

MODE имя устройства параметры

Настройка внешнего устройства, запись в файл кодов (внешняя команда).

Возможные параметры:
Символ "[" - код ESC, символ "#" - означает, что далее следует код в десятичном формате.
Примеры:

 

MODE PRN [@

-

инициализация принтера.

 

MODE CON #155 ПРИВЕТ

-

передача кода 155 и сообщения "ПРИВЕТ" на консоль (вывод на экран дисплея )

 

MODE F.TXT [@ [! #128

-

передача кодов: ESC @, ESC !, 128 в файл F.TXT.

15.

CBOOT имя диска /параметры

Коррекция загрузочного сектора для возможности работы дискеты на IBM - компьютере (внешняя команда).

Возможные параметры:

/IBM - коррекция загрузочного сектора в формат IBM.

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

/? - вывод краткой справочной информации.

Примеры:

 

CBOOT B: /IBM

-

коррекция загрузочного сектора в формат IBM.

 

CBOOT /BK

-

коррекция текущего диска в формат БК.

 

CBOOT /?

-

вывод справочной информации.

ПРИМЕЧАНИЕ:

  1. После коррекции загрузочного сектора в формат IBM, диск становится не системным.
  2. Для форматов 160, 180, 320, 360 применять утилиту нецелесообразно, на IBM дискеты работают без коррекции.
  3. В командной строке параметры должны быть отделены пробелом.
  4. Перенаправления ввода/вывода осуществляются с помощью знаков:
    • '>' - перенаправление вывода, (если файл существовал, он уничтожается).
    • '>>' - перенаправление вывода, (если файл существовал, данные добавляются к концу этого файла. Если файла нет - создаётся новый).
    • '<' - перенаправление ввода.
  5. Перенаправления ввода/вывода возможно в программах, которые обращаются к функциям DOS.
  6. Формат 40 дорожек 10 секторов является не стандартным, на дисководе с 80-ю дорожками работа дискеты невозможна. (этот недостаток будет устранён в следующей версии DOS)

РЕДАКТОР КОМАНДНОЙ СТРОКИ DOS.

Для работы, пользователю предоставляется небольшой сервис:

'СТРЕЛКА ВНИЗ'

-

вывод содержимого буфера командной строки на экран. (если буфер пуст, команда игнорируется)

'СТРЕЛКА ВВЕРХ'

-

стирание с экрана раннее введённой информации. (информация в буфере сохраняется)

'СТРЕЛКА ВПРАВО'

-

вывод одного символа из буфера на экран.

'СТРЕЛКА ВЛЕВО'

-

стирание одного символа с экрана.

'ВВОД'

-

ввод в буфер информации, находящейся на экране.

СУ+F

-

(код 6) информация, выводимая на экран, выводится на принтер.

При выполнении внутренней или внешней команды, информация в командной строке сохраняется. Строчные латинские символы преобразуются в заглавные.

ПАКЕТНЫЕ ФАЙЛЫ.

Как уже говорилось DOS может выполнять пакетные файлы пользователя.

Пакетный файл создаётся с помощью команды

 COPY CON имя файла.

(см. команду COPY).

Пакетный файл должен иметь расширение 'BAT'.

  1. Вызов файла на исполнение:

    ИМЯ ФАЙЛА <параметр1> <параметр2> ...

    (параметры вводятся, если в пакетном файле используются формальные параметры, см. ниже).

  2. Из командного файла можно вызвать другой с последующим возвратом (максимальная вложенность равна 3-м).

  3. Дополнительные команды DOS, которые используются в пакетных файлах:

    1. '@' - подавление вывода изображения строки на экран.

      Данная команда подавляет вывод на экран той строки, перед которой стоит знак '@'.

      Пример:

      @ECHO OFF - отключение вывода на экран, одновременно эта команда не выводится на экран.

    2. имя.BAT - вызов другого командного файла.

  4. Пакетный файл может содержать формальные параметры.

При исполнении формальные параметры заменяются на фактические (из командной строки). Максимальное количество параметров - 10.

Параметру %0 соответствует имя самого пакетного файла. Формальные переменные можно использовать и в программах пользователя.

Примеры: пакетный файл содержит команды:

TYPE %0

просмотр пакетного файла;

TYPE %1

просмотр первого файла;

COPY %2 %1

копирование второго файла в первый.

Правило вызова:

имя.BAT имя1 имя2

Следующая информация предназначена для системных программистов.

Файловая система DOS использует понятие УПРАВЛЯЮЩЕГО БЛОКА ФАЙЛА (FILE CONTROL BLOCK или сокращённо FCB). Занося в поля FCB (см. ниже) определённые данные, можно считывать/записывать данные произвольного размера из любого места файла (прямой доступ). Ниже приводится формат полей FCB блока. Неописанные поля используемые DOS, пользователь не должен изменять, т.к. это может привести к порче файла или всей файловой системы (появление 'висячих кластеров').

Все числа даны в восьмеричной системе.

Программисту необходимо занести в соответствующие поля FCB только номер дисковода, имя файла (с суффиксом) и вызвать соответствующую функцию, остальные поля FCB заполняет система.

Смещение Размер (б) Назначение Имя

0

1

номер дисковода: 0-текущий, 1-'А', 2-'В'...

F$NDRV

1

13

имя файла + суффикс файла

F$FLNM

14

4

номер текущего блока (для функций последовательного доступа).

F$CBLK

20

4

размер файла в байтах.

F$FLSZ

24

2

размер записи в байтах.

F$RCSZ

26

2

дата создания файла.

F$FLDT

30

2

адрес загрузки файла в память (для исполняемых файлов)

F$FLLD

32

2

начальный кластер.

F$STCL

34

2

положение имени файла в каталоге.

F$DIRP

36

4

номер записи (для функций прямого доступа)

F$RECN

42

2

адрес обмена

F$DTAD

44

1

идентификатор устройства.

F$IDEV

45

1

атрибуты файла

F$ATTR

46

2

текущая запись (последов. доступ к файлам)

F$CURR

50

1

признак открытия файла

F$FOPN

51

1

признак записи в файл

F$FWRT

52

2

текущий обрабатываемый кластер

F$CWCL

54

2

счётчик обрабатываемых кластеров

F$NWCL

Модифицированный FCB: со смещения 15, т.е. с 15-го байта от начала таблицы вносится новое имя (для функции переименования)

Более подробное описание:

Размер записи

количество байтов которое будет передано на диск (или с диска) за одну операцию ввода/вывода.

номер текущего блока

размер блока = 128Д байт записей (см. поле F$CURR)

идентификатор устройства

имя устройства, которому принадлежит FCB.

Для дисководов: А - код буквы 'А'...

Для консоли: 377

Для AUX : 376

Для NUL : 375

Для LST : 374 (принтер)

Для PRN : 373 (принтер)

положение в каталоге

порядковый номер от начала каталога.

Дисковая область.

Для каждого устройства (кроме символьных) в памяти отводится 1002 байта (размер сектора, может отличаться от 1000 б) для размещения FAT и 56 байт для размещения параметров устройства и промежуточных данных.

Все числа даны в восьмеричной системе.

Смещение Назначение Имя

0

размер сектора в байтах

P$SECZ

2

размер кластера в блоках

P$CLSZ

4

количество копий FAT

P$NFAT

6

максимальное количество элементов в каталоге

P$DIRZ

10

общее число блоков на диске

P$TSEC

12

идентификатор формата (медиа дескриптор)

P$FMTI

14

размер FAT в блоках

P$FATZ

16

число секторов на дорожке

P$NSEC

20

количество сторон диска

P$NSID

22

зарезервировано

P$TMP1

24

размер кластера в байтах

P$CLBZ

26

счётчик открытых файлов для этого устройства

P$FLCT

30

конечный сектор каталога

P$ENDS

32

начальный сектор каталога

P$DIRS

34

последний свободный кластер на диске

P$LFCL

36

биты настройки контроллера.

P$PSET

40

параметры дисковода

P$PDRV

42

номер устройства

P$NDRV

44

Используется DOS обрабатываемый сектор фат  в буфере

P$FSNB

46

адрес FAT в памяти

P$AFAT

50

Используется DOS флаг изменения фат

P$FSCH

52

Используется DOS

P$TMP4

54

Тип операции: 0 - чтение, иначе запись

P$OPTP

ФУНКЦИИ DOS.

Доступ к устройствам DOS возможен двумя способами:

  1. Посредством EMT 36 (БК0010).
  2. Через функции DOS, вектор 20 (команда IOT).

Параметры EMT 36 не отличаются от параметров передаваемых магнитофону поэтому все программы разработанные раннее будут работать с диском. Возможности EMT 36 весьма скромны, поэтому желательно чтобы программы обращались к ресурсам DOS через функции.

Ниже приводится описание всех функций, предоставляемых программисту. (В скобках указывается десятичный номер).

 

 

Функция 0 (0.)

Завершение программы пользователя.

Управление передается в DOS, вызывается оболочка имя которой записано в переменной COMSPEC

     

 

 

Функция 1 (1.)

Ввод символа со стандартного устройства ввода (по умолчанию - консоль).

Выход:

R0 -

код символа.

 

 

Функция 2 (2.)

Вывод символа на стандартное устройство вывода (по умолчанию - консоль).

Вход:

R0 -

код символа.

 

Функции 3, 4, 7, 10, 12, 13 зарезервированы

 

 

Функция 5 (5.)

Вывод символа на принтер.

Вход:

R0 -

код символа (стробирующий бит на БК0010 - 400, на остальных - 40000)

 

 

Функция 6 (6.)

Буферизованный ввод с клавиатуры с возможностью редактирования.

Вход:

R1 -

адрес буфера,

 

R2 -

размер буфера в байтах.

 

 

Функция 11 (9.)

Вывод строки символов на устройство вывода (по умолчанию - консоль).

Вход:

R1 -

адрес строки символов. (Строка должна оканчиваться нулевым байтом)

 

 

Функция 14 (12.)

Очистить буфер командной строки.

     

 

 

Функция 15 (13.)

Инициализировать драйвер (контроллер) дисковода.

     

 

 

Функция 16 (14.)

Задать текущий дисковод.

Вход:

R0 -

номер дисковода. 0 - дисковод "А" и т. д.

 

 

Функция 17 (15.)

Открыть файл методом FCB.

Вход:

R4 -

адрес FCB.

 

 

Функция 20 (16.)

Закрыть файл.

Вход:

R4 -

адрес FCB.

 

 

Функция 21 (17.)

Найти первый файл по образцу.

Вход:

R4 -

адрес FCB.

Выход:

R1 -

указатель на найденную запись файла.

 

 

Функция 22 (18.)

Продолжить поиск файлов. (перед вызовом вызвать функцию 21, FCB не изменять)

Вход:

R4 -

адрес FCB.

Выход:

R1 -

указатель на найденную запись файла.

 

 

Функция 23 (19.)

Удалить файл.

Вход:

R4 -

адрес FCB.

(файл должен быть закрытым, допускается использовать символ групповой операции '?').

 

 

Функция 24 (20.)

Последовательное чтение из файла.

Вход:

R4 -

адрес FCB.

После чтения соответствующие поля FCB модифицируются.

 

 

Функция 25 (21.)

Последовательная запись в файл.

Вход:

R4 -

адрес FCB.

После записи соответствующие поля FCB модифицируются.

 

 

Функция 26 (22.)

Создать файл. (если файл существовал, то размер его устанавливается равным 0).

Вход:

R4 -

адрес FCB.

 

 

Функция 27 (23.)

Переименовать файл.

Вход:

R4 -

адрес модифицированного FCB. (Разрешается использовать символ групповой операции '?').

 

 

Функция 30 (24.)

Доступ к буферам DOS.

Выход:

R0 -

адрес области BAT-файлов.

первое слово - уровень вложенности ( 0 - область пуста).

 

R1 -

адрес FCB стандартного устройства ввода.

 

R2 -

адрес FCB стандартного устройства вывода.

 

 

Функция 31 (25.)

Получение номера текущего устройства прямого доступа (дисковода).

Выход:

R0 -

номер дисковода.

 

 

Функция 32 (26.)

Установление адреса области обмена с диском (адрес чтения/записи физического сектора)

Вход:

R0 -

адрес обмена.

 

 

Функция 33 (27.)

Получить параметры текущего устройства (кроме символьных).

Вход:

R0 -

номер устройства (1 - дисковод "А"...)

Выход:

R2 -

адрес списка параметров. (изменять данные запрещается).

 

 

Функция 34 (28.)

Аналогична функции 33 (27.), но для заданного устройства.

Вход:

R0 -

номер устройства (1 - дисковод "А"...)

Выход:

R2 -

адрес списка параметров (изменять данные запрещается).

 

Функции 35, 36 зарезервированы.

 

 

Функция 37 (31.)

Перехват EMT.

Вход:

R0 -

номер EMT (на БК0010 от 0 до 50, на БК0011(М) от 0 до 130)

 

R1 -

абсолютный адрес программы обработки данного EMT. (если R1=0, то адрес восстанавливается)

 

 

Функция 40 (32.)

Получить адрес области окружения DOS.

Выход:

R1 -

адрес начала области.

 

R2 -

размер области в байтах.

 

 

Функция 41 (33.)

Прямой доступ, чтение.

Вход:

R4 -

адрес FCB.

Выход:

R0 -

сколько байт считано.

 

 

Поля FCB не изменяются.

 

 

Функция 42 (34.)

Прямой доступ, запись.

Вход:

R4 -

адрес FCB.

Выход:

R0 -

сколько байт записано.

 

 

Поля FCB не изменяются.

 

 

Функция 43 (35.)

Получить размер файла в байтах.

Вход:

R4-

адрес FCB

Выход:

R0 -

младшее слово размера,

 

R1 -

старшее слово размера.

 

 

Функция 44 (36.)

Задать позицию прямого доступа.

Т.е. перейти от последовательного доступа к прямому доступу.

Вычисляется номер записи по номеру блока и номеру записи при последовательном доступе.

Вход:

R4 -

адрес FCB

 

 

Функция 45 (37.)

Задать новую подпрограмму обработки функции.

Вход:

R0 -

номер функции.

 

R1 -

абсолютный адрес подпрограммы.

 

 

Функция 46 (38.)

Исполнить программу. (Автозапуск работает корректно).

Вход:

R1 -

адрес строки содержащую имя файла.

 

R2 -

флаг: 0 - запуска не происходит, иначе файл запускается на исполнение.

 

 

Функция 47 (39.)

Считать несколько записей.

Вход:

R4 -

адрес FCB.

 

R0 -

количество записей.

Выход:

R0 -

сколько записей действительно считано.

 

 

Поле FCB "номер записи" модифицируется.

 

 

Функция 50 (40.)

Записать несколько записей.

Вход:

R4 -

адрес FCB.

 

R0 -

количество записей.

Выход:

R0 -

сколько записей действительно записано.

 

 

Поле FCB "номер записи" модифицируется.

 

 

Функция 51 (41.)

Произвести синтаксический разбор строки.

Вход:

R1 -

адрес обрабатываемой строки.

 

R4 -

адрес формируемого FCB-блока.

 

R2 -

тип разбора: если 0, то обычный разбор, если не 0, то если встретится первым код 0,

FCB примет вид: _???????????

Выход:

R2 -

количество символов '?'.

 

 

Функция 52 (42.)

Получить текущую дату.

Выход:

R0 -

дата

 

 

Функция 53 (43.)

Установить дату.

Вход:

R0 -

дата

 

 

Функция 54 (44.)

Абсолютно считать сектор.

Вход:

R0 -

номер дисковода (1 - дисковод "А"...)

 

R1 -

номер сектора.

 

R2 -

адрес загрузки.

 

 

Для нормальной работы область параметров данного устройства должна быть заполненной.

 

 

Функция 55 (45.)

Абсолютно записать сектор. Параметры аналогичны функции 54 (44.)

Вход:

R0 -

номер дисковода (1 - дисковод "А"...)

 

R1 -

номер сектора.

 

R2 -

адрес загрузки.

 

 

Для нормальной работы область параметров данного устройства должна быть заполненной.

 

 

Функция 56 (46.)

Обработка критических ошибок.

Выход:

R0 -

символ:

I - игнорировать,

R - повторить,

А - отменить.

 

 

Функция 57 (47.)

Получить адрес обмена с диском (адрес чтения/записи сектора).

Выход:

R0 -

адрес.

 

 

Функция 60 (48.)

Получить версию DOS.

Выход:

R0 -

версия:

ст. байт номер версии, мл. байт номер подверсии.

 

 

Функция 61 (49.)

Доступ к внутрисистемной информации.

Выход:

R1 -

адрес области DOS.

 

 

Функция 62 (50.)

Получить адрес дисковой области.

Вход:

R0 -

номер устройства

Выход:

R1 -

адрес области.

 

 

Функция 63 (51.)

Вызывается при неверном ЕМТ (на БК0010 >50, на БК0011(М) >130).

Выход:

R4 -

номер ЕМТ функции. Программа обработки должна оканчиваться командой RTS PC.

 

 

Функция 64 (52.)

Получить доступ к командной строке.

Выход:

R1 -

адрес командной строки.

 

R2 -

размер командной строки в байтах.

 

 

Функция 65 (53.)

Получить абсолютный адрес подпрограммы обработки функции.

Вход:

R0 -

номер функции.

Выход:

R0 -

абсолютный адрес в памяти.

 

 

Функция 66 (54.)

Получить размер свободного пространства на диске.

Вход:

R0 -

номер дисковода (1 - дисковод "А"...).

Выход:

R1 -

секторов в кластере.

 

R2 -

общее количество кластеров на диске.

 

R0 -

количество свободных кластеров.

 

 

Функция 67 (55.)

Получить переменную из области окружения DOS.

Вход:

R1 -

адрес имени переменной.

Выход:

R2 -

указывает на значение переменной в окружении DOS.

 

R0 -

указывает на имя переменной в области окружения DOS.

если переменной нет, то С=1 и R2-указывает на свободную строку в области окружения DOS.

 

 

Функция 70 (56.)

Записать переменную в область окружения DOS.

Вход:

R1 -

адрес строки.

 

Все функции DOS вызываются с помощью команды IOT, следующее слово - номер функции. Если при выполнении функции имела место ошибка, то бит С=1 и в ячейке 52 хранится код ошибки.

Пример 1:

 MOV    #1000,R1        ;адрес буфера ввода строки символов
 MOV    #200,R2         ;размер области
 IOT                    ;вызвать функцию 6(ввод строки символов)
 .#6
 IOT                    ;вызвать функцию номер 11(вывод строки
                        ;символа на стандартное
 .#11                   ;устройство вывода)
 IOT                    ;возврат в DOS.
 .#0
	

Пример 2:

MOV     #ADR,R1         ;адрес строки содержащую имя файла
MOV     #FCB,R4         ;адрес FCB-блока (формируемого)
IOT
.#51                    ;синтаксический разбор имени файла, заполнение полей FCB
IOT
.#17                    ;открыть файл
MOV     #6,16(R4)       ;размер записи - 6 байт
MOV     #ADR1,50(R4)    ;задать адрес обмена
MOV     #20,42(R4)      ;считывание производить с 20-й записи
IOT                     ;произвести чтение с диска
.#41
IOT                     ;закрыть файл
.#20
    

С помощью функций возможен доступ к внутрисистемной информации.

Полная таблица внутрисистемной информации:

Имя Смещение Размер (б) Назначение

S$BUFT

0

 

буфер для сохранения PSW, а так же флаг чтение-запись

S$DOSA

2

 

адрес начала области окружения DOS

S$CLSZ

4

 

количество кластеров на диске

S$DBLA

6

*

адрес списка дисковых блоков. (адреса абсолютные)

S$DOSZ

10

 

длина области окружения DOS (120 байтов)

S$ER52

12

 

номер прошлой ошибки в ячейке 52

S$CRDN

14

(1б)

номер текущего устройства прямого доступа (дисковода).

S$DRVN

15

*(1б)

количество устройств прямого доступа в системе.

S$FLPN

16

*(1б)

количество дисководов в системе.

S$IONC

17

(1б)

флаг, указывающий, что буферы S$BIOA и S$SIOA не совпадают.

S$FWBF

20

*

адрес рабочей области драйвера дисковода (длина 70 байтов).

S$STBP

22

*

значение стробирующего бита для принтера: 400 - для БК0010, 40000 - для БК0011.

S$DATE

24

 

текущая дата

S$NMBF

26

 

адрес буфера длиной 14 байтов имени для поиска

S$BIOA

30

 

адрес области обмена с диском (адрес чтения/записи физического сектора), который можно изменить пользователем

S$TFCB

32

 

адрес буфера FCB под параметры устройства и промежуточных данных.

S$SIOA

34

 

системный адрес области обмена с диском (адрес чтения/записи физического сектора) не изменяемый

S$PRNF

36

(1б)

флаг вывода на принтер. !0 - выводить, 0 - не выводить

S$INKF

37

(1б)

флаг: 0 - ввод с клавиатуры, иначе - ввод с устройства ввода

S$BINA

40

 

адрес буфера устройства ввода, длиной 2 байта

S$DSTW

42

 

номер сектора каталога, который надо обработать

S$DIRP

44

(1б)

номер записи в каталоге (для создаваемых файлов)

S$TPLF

45

(1б)

признак, что имя задано шаблоном (для переименования)

S$FCIA

46

 

адрес FCB стандартного устройства ввода

S$BOUA

50

 

адрес буфера устройства вывода, длиной 2 байта

S$ISSP

52

 

вершина внутрисистемного указателя стека для перехватчика emt 36

S$RENF

54

(1б)

флаг режима переименования (используется для внутренних целей),
55 - свободно

S$CDSN

56

 

номер обрабатываемого сектора каталога при операциях с каталогом

S$PDOS

60

*

адрес начала DOS.

S$ONED

62

(1б)

Флаг, указывающий, что в системе всего один дисковод (1, если всего 1 дисковод, иначе 0),
63 - свободно

S$RSFA

64

*

адрес таблицы подпрограмм чтения блоков с устройства (при старте устанавливается 160004 для всех устройств).

S$RSLA

66

*

адрес таблицы подпрограмм чтения секторов на логическом уровне (на уровне DOS), использует п/п из таблицы S$RSFA

S$CSNW

70

 

номер сектора в буфере, который надо сохранить

S$CSNB

72

 

номер сектора, который находится в буфере чтения/записи

S$FLUF

74

 

номер дисковода, на который надо сохранить сектор

S$DNSB

76

(1б)

номер устройства, сектор которого в буфере чтения/записи

 

 

 

76 иногда используется как слово, а иногда как байт

S$CDDN

100

(1б)

номер дисковода, каталог которого в буфере

S$FCOA

102

 

адрес FCB стандартного устройства вывода

S$BRDT

104

*(1б)

тип машины: 0 - БК0010, 1 - БК0011М, 2 - БК0011.

S$MONT

105

*(1б)

тип монитора: 0 - БК0010, 1 - БК0011М, 2 - БК0011.

S$BTFA

106

 

адрес области BAT файлов длиной 204 байта, первое слово - уровень вложенности

S$MBPT

110

 

указатель в памяти на обрабатываемые данные (куда читать с диска, откуда писать на диск)

S$FPTR

112

(4б)

текущее положение указателя в файле

S$NCLS

116

 

количество обрабатываемых кластеров

S$BSCC

120

 

счётчик прочитанных/записанных байтов

S$SCLC

122

 

счётчик секторов в кластере

S$BIOO

124

 

смещение в буфере текущего сектора чтения/записи

S$SDNM

126

*

адрес списка имён символьных устройств.(имена разделены нулевым байтом).

S$SDJA

130

*

адрес таблицы переходов для символьных устройств.

S$IOTA

132

 

адрес таблицы подпрограмм IOT диспетчера

S$ERMA

134

 

адрес таблицы символьных сообщений об ошибке, строки разделяются 0

S$FADR

136

 

адрес загрузки/записи файла

S$FCRC

140

 

CRC файла

S$FSZE

142

 

размер файла

S$CMLA

144

 

адрес командной строки

S$CMLS

146

 

длина командной строки (длина 140 байтов)

S$CEMB

150

 

адрес буфера, перехвата ЕМТ команд, для монитора БК11 * 2

S$EMCN

152

 

количество ЕМТ команд, 132 для монитора БК11 и 50 для монитора БК10

S$EXSY

154

 

адрес функции выхода в ДОС

S$OV30

156

 

адрес адреса старого вектора 30

S$BE36

160

 

адрес буфера копии имени в перехватчике emt36 (100 байтов)

S$LE36

162

 

длина буфера копии имени в перехватчике emt36 (100 байтов)

S$HRAM

164

*

верхний адрес пользовательского ОЗУ.

S$PPAD

166

*

адрес параллельного порта (при старте устанавливается значение 177714).

Примечание. * помечены официально описанные в документации ячейки, значение остальных выявлено в процессе реверсинга. Как написано в оригинале, "остальные ячейки изменять нельзя, т.к. это может привести к порче файловой системы или зависанию компьютера". Но и если значения описанных ячеек менять, то тоже можно добиться порчи файловой системы или зависания компьютера. Так что знать назначение всех ячеек крайне полезно.

Структура элемента каталога MS DOS

Имя Смещение Размер (б) Назначение

K$NAME

0

13

Короткое имя файла

K$ATTR

13

1

Атрибуты файла

K$RSV1

14

1

*Зарезервировано под Windows NT (должно содержать 0)

K$RSV2

15

1

*Поле, уточняющее время создания файла (в десятках миллисекунд). Значение поля может находиться в пределах от 0 до 199

K$TIME

16

2

*Время создания файла

K$DATE

20

2

*Дата создания файла

K$DLUS

22

2

*Дата последнего обращения к файлу для записи или считывания данных

K$CLNH

24

2

*Старшее слово номера первого кластера файла

K$TLWR

26

2

Время выполнения последней операции записи в файл

K$DLWR

30

2

Дата выполнения последней операции записи в файл

K$CLNL

32

2

Младшее слово номера первого кластера файла

K$SIZE

34

4

Размер файла в байтах (32-разрядное число)

Знак "*" означает, что поле обрабатывается только в файловой системе FAT32. В системах FAT12 и FAT16 поле считается зарезервированным и содержит значение 0.

Некоторые функции DOS требуют в качестве параметра байт атрибутов файла. Разряды байта атрибутов устанавливаются в 1 в том случае, если у файла имеется соответствующее свойство:

бит 0 (1) - только для чтения;

бит 1 (2) - скрытый;

бит 2 (4) - системный;

бит 3 (10)- идентификатор тома;

бит 4 (20)- каталог;

бит 5 (40)- архивирован;

биты 6 и 7 - резерв (установлены в 0).

Для DX-DOS как и в ANDOS вместо времени создания файла по смещению D$TLWR хранится адрес загрузки файла.

Созданная операционная система, являясь системой MS-DOS - типа, допускает последующее наращивание. В версии 1.00 системы реализована только небольшая часть системы MS-DOS и ее многочисленных возможностей. Основное ограничение DX-DOS - отсутствие поддержки древовидных файловых структур. Преодоление этого ограничения связано прежде всего с наращиванием аппаратных ресурсов, прежде всего оперативной памяти (речь идёт о модели БК 0010). Для компьютера БК 0010 значение наращиваемой памяти составляет 16 Кб. Для БК 0011(М) дополнительное наращивание памяти не требуется.

Следует отметить, что создание операционной системы DX-DOS является, по существу, первым шагом в реализации достаточно масштабной и сложной программы создания платформы высокого уровня, ресурсы которой включали бы ряд важных функций таких как прямой доступ к файлам, возможность подключения драйверов.

Реализация этих дополнительных возможностей позволит, пользуясь уже высокоуровневыми средствами, создавать прикладные программные продукты, в которых на полную мощность будет вестись работа с файлами. Фактически, это открывает прямой доступ к системам управления базами данных.

Коды ошибок.

17

-

не поддерживаемый медиадескритор (не поддерживаемый формат).

20

-

файл не открыт при файловой операции.

21

-

неверный номер устройства прямого доступа.

22

-

не найдено свободных кластеров на диске.

23

-

ошибка закрытия файла (пытаемся закрыть не тот файл, что открывали).

24

-

не найдена запись файла в каталоге.

25

-

достигли конца каталога при поиске файлов.

26

-

попытка чтения за концом файла, прочитано 0 байтов.

27

-

при чтении достигли конца файла, но сколько- то прочитано.

30

-

ошибка при проверке имени на валидность.

31

-

деление на 0.

33

-

ошибка при переименовании файла, исходный файл не найден.

34

-

оборвана цепочка фат.

35

-

ошибка при синтаксическом разборе строки (неожиданный конец строки).

36

-

размер записи превышает 64кб.

37

-

ошибка при удалении файла, удаляемый файл открыт.

40

-

ошибка при записи переменной окружения, нет переменной.

41

-

ошибка при записи переменной окружения, нет значения.