ОПЕРАЦИОННАЯ СИСТЕМА 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:
- Файловая система аналогична MS-DOS, MSX-DOS.
- Дисковые операции (буферизация ввода/вывода).
- Прямой и последовательный доступ к файлам.
- Возможность обработки файлов практически любой длины.
- Наличие стандартных внешних устройств. (Эти устройства всегда доступны всем программным средствам)
- Обработка пакетных файлов пользователя.
- Система функций, доступных программисту.
- Наличие переменных окружения DOS.
- Обработка дискет различных форматов. (форматы: 160, 180, 320, 360, 400, 640, 720, 800)
- Имеется возможность обработки собственного формата диска.
- Возможность работы с различными типами дисководов. (Число дорожек определяется при старте DOS)
- Возможность подключения новых внешних устройств.
- Возможность подключения новых драйверов.
- Возможность работать одновременно с несколькими файлами.
- Возможно производить чтение из файла и запись в файл одновременно, не закрывая его.
- Оригинальный алгоритм позволяет обрабатывать FAT и каталог любого размера.
- На БК0011(М) работает без предварительной эмуляции БК0010.
- Все модули системы абсолютно перемещаемы.
DX-DOS состоит из 3-х частей:
- Системный загрузчик.
- Ядро системы (DXDOS.SYS).
- Командный процессор (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.
(Данная конфигурация не помещается в памяти).
При наличии такого диагноза можно рекомендовать следующие действия:
- отключение дисковода (при наличии более 2-х дисководов);
- увеличение памяти.
Если обнаружен 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 имя устройства параметры |
Настройка внешнего устройства, запись в файл кодов (внешняя команда). Возможные параметры: |
|
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 /? |
- |
вывод справочной информации. |
ПРИМЕЧАНИЕ:
- После коррекции загрузочного сектора в формат IBM, диск становится не системным.
- Для форматов 160, 180, 320, 360 применять утилиту нецелесообразно, на IBM дискеты работают без коррекции.
- В командной строке параметры должны быть отделены пробелом.
- Перенаправления ввода/вывода осуществляются с помощью знаков:
- '>' - перенаправление вывода, (если файл существовал, он уничтожается).
- '>>' - перенаправление вывода, (если файл существовал, данные добавляются к концу этого файла. Если файла нет - создаётся новый).
- '<' - перенаправление ввода.
- Перенаправления ввода/вывода возможно в программах, которые обращаются к функциям DOS.
- Формат 40 дорожек 10 секторов является не стандартным, на дисководе с 80-ю дорожками работа дискеты невозможна. (этот недостаток будет устранён в следующей версии DOS)
РЕДАКТОР КОМАНДНОЙ СТРОКИ DOS.
Для работы, пользователю предоставляется небольшой сервис:
'СТРЕЛКА ВНИЗ' |
- |
вывод содержимого буфера командной строки на экран. (если буфер пуст, команда игнорируется) |
'СТРЕЛКА ВВЕРХ' |
- |
стирание с экрана раннее введённой информации. (информация в буфере сохраняется) |
'СТРЕЛКА ВПРАВО' |
- |
вывод одного символа из буфера на экран. |
'СТРЕЛКА ВЛЕВО' |
- |
стирание одного символа с экрана. |
'ВВОД' |
- |
ввод в буфер информации, находящейся на экране. |
СУ+F |
- |
(код 6) информация, выводимая на экран, выводится на принтер. |
При выполнении внутренней или внешней команды, информация в командной строке сохраняется. Строчные латинские символы преобразуются в заглавные.
ПАКЕТНЫЕ ФАЙЛЫ.
Как уже говорилось DOS может выполнять пакетные файлы пользователя.
Пакетный файл создаётся с помощью команды
COPY CON имя файла.
(см. команду COPY).
Пакетный файл должен иметь расширение 'BAT'.
-
Вызов файла на исполнение:
ИМЯ ФАЙЛА <параметр1> <параметр2> ...
(параметры вводятся, если в пакетном файле используются формальные параметры, см. ниже).
-
Из командного файла можно вызвать другой с последующим возвратом (максимальная вложенность равна 3-м).
-
Дополнительные команды DOS, которые используются в пакетных файлах:
-
'@' - подавление вывода изображения строки на экран.
Данная команда подавляет вывод на экран той строки, перед которой стоит знак '@'.
Пример:
@ECHO OFF - отключение вывода на экран, одновременно эта команда не выводится на экран.
-
имя.BAT - вызов другого командного файла.
-
-
Пакетный файл может содержать формальные параметры.
При исполнении формальные параметры заменяются на фактические (из командной строки). Максимальное количество параметров - 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 |
2 |
номер текущего блока (для функций последовательного доступа). |
F$CBLK |
16 |
2 |
размер записи в байтах. |
F$RCSZ |
20 |
4 |
размер файла в байтах. |
F$FLSZ |
24 |
2 |
дата создания файла. |
F$FLDT |
26 |
2 |
адрес загрузки файла в память (для исполняемых файлов) |
F$FLLD |
30 |
1 |
идентификатор устройства. |
F$IDEV |
31 |
1 |
положение имени файла в каталоге. |
F$DIRP |
32 |
2 |
начальный кластер. |
F$STCL |
34 |
4 |
используется DOS. |
F$TMP1 |
40 |
1 |
текущая запись (последов. доступ к файлам) |
F$CURR |
41 |
1 |
признак открытия файла |
F$FOPN |
42 |
4 |
номер записи (для функций прямого доступа) |
F$RECN |
46 |
1 |
используется DOS |
F$TMP3 |
47 |
1 |
атрибуты файла |
F$ATTR |
50 |
2 |
адрес обмена |
F$DTAD |
Модифицированный FCB: со смещения 15, т.е. с 15-го байта от начала таблицы вносится новое имя (для функции переименования)
Более подробное описание:
Размер записи |
количество байтов которое будет передано на диск (или с диска) за одну операцию ввода/вывода. |
номер текущего блока |
размер блока = 128Д байт записей (см. смещение 40) |
идентификатор |
имя устройства, которому принадлежит 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$TMP2 |
46 |
адрес FAT в памяти |
P$AFAT |
50 |
Используется DOS флаг изменения фат |
P$TMP3 |
52 |
Используется DOS |
P$TMP4 |
54 |
Тип операции: 0 - чтение, иначе запись |
P$OPTP |
ФУНКЦИИ DOS.
Доступ к устройствам DOS возможен двумя способами:
- Посредством EMT 36 (БК0010).
- Через функции 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б) |
флаг режима переименования (используется для внутренних целей), |
S$CDSN |
56 |
номер обрабатываемого сектора каталога при операциях с каталогом |
|
S$PDOS |
60 |
* |
адрес начала DOS. |
S$ONED |
62 |
(1б) |
Флаг, указывающий, что в системе всего один дисковод (1,
если всего 1 дисковод, иначе 0), |
S$RSFA |
64 |
* |
адрес таблицы подпрограмм чтения сектора с устройства (при старте устанавливается 160006 для всех устройств). |
S$RSLA |
66 |
* |
адрес таблицы подпрограмм чтения секторов на логическом уровне.(на уровне DOS) |
S$CSNW |
70 |
номер сектора в буфере, который надо сохранить |
|
S$CSNB |
72 |
номер сектора, который находится в буфере чтения/записи |
|
S$DNWS |
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
Имя | Смещение | Размер (б) | Назначение |
---|---|---|---|
D$NAME |
0 |
13 |
Короткое имя файла |
D$ATTR |
13 |
1 |
Атрибуты файла |
D$RSV1 |
14 |
1 |
*Зарезервировано под Windows NT (должно содержать 0) |
D$RSV2 |
15 |
1 |
*Поле, уточняющее время создания файла (в десятках миллисекунд). Значение поля может находиться в пределах от 0 до 199 |
D$TIME |
16 |
2 |
*Время создания файла |
D$DATE |
20 |
2 |
*Дата создания файла |
D$DLUS |
22 |
2 |
*Дата последнего обращения к файлу для записи или считывания данных |
D$CLNH |
24 |
2 |
*Старшее слово номера первого кластера файла |
D$TLWR |
26 |
2 |
Время выполнения последней операции записи в файл |
D$DLWR |
30 |
2 |
Дата выполнения последней операции записи в файл |
D$CLNL |
32 |
2 |
Младшее слово номера первого кластера файла |
D$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 |
- |
ошибка при записи переменной окружения, нет значения. |