Понедельник, 11.12.2017, 22:03

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Дисковые Операционные Системы (DOS) » «DX-DOS v1.00» » Инструкция по ДОС (Файл 4) («DX-DOS v1.00» [DOSDOC4.TXT])
Инструкция по ДОС (Файл 4)
-=RUS=-Дата: Вторник, 29.04.2014, 06:46 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: Offline

    Следующая информация предназначена для системных   
программистов.  
 
    Файловая система DOS использует понятие УПРАВЛЯЮЩЕГО БЛОКА  
 ФАЙЛА (FILE CONTROL BLOCK или сокращенно FCB).  
 Занося в поля FCB (см.ниже) определенные данные, можно  
 считывать/записывать данные произвольного размера из любого  
 места файла (прямой доступ). Ниже приводится формат полей FCB  
блока. Неописанные поля используемые DOS, пользователь  
не должен изменять, т.к. это может привести к порче файла или  
 всей файловой системы (появление 'висячих кластеров').  
 Все числа даны в восмеричной системе.  
Программисту необходимо занести в соответствующие поля FCB  
только номер дисковода, имя файла (с суффиксом) и вызвать  
соответствующую функцию, остальные поля FCB заполняет система.  
 
--------------------------------------------------------------
смещение!размер(б)!      назначение  
--------------------------------------------------------------
   0    !   1     ! номер дисковода: 0-текущий,1-'А',2-'В'...  
   1    !  13     ! имя файла + суффикс файла  
   14   !  2      ! номер текущего блока(для функций после-  
        !         ! довательного доступа.  
   16   !  2      ! размер записи в байтах.  
   20   !  4      ! размер файла в байтах.  
   24   !  2      ! дата создания файла.  
   26   !  2      ! адрес загрузки файла в память (для   
        !         ! исполняемых файлов)  
   30   !  1      ! идентификатор устройства.  
   31   !  1      ! положение имени файла в каталоге.  
   32   !  2      ! начальный кластер .  
   34   !  4      ! используется DOS.  
   40   !  1      ! текущая запись (последов.доступ к файлам)  
   42   !  4      ! номер записи (для функций прямого доступа)  
   46   !  1      ! используется DOS  
   47   !  1      ! атрибуты файла  
   50   !  2      ! адрес обмена  
--------------------------------------------------------------  
Модифицированный FCB: со смещения 15, т.е. с 15-го байта от   
начала таблицы вносится новое имя (для функции переименования)  
--------------------------------------------------------------  
Более подробное описание:  
    Размер записи  - количество байтов которое будет передано  
                     на  диск (или с диска) за одну операцию  
                     ввода/вывода.  
    номер текущего блока  - размер блока = 128 (дес) байт  
                     записей (см. смещение 40)  
    идентификатор  - имя устройства, которому принадлежит FCB.  
                     Для дисководов: А - код буквы 'А'...  
                     Для консоли: 377  
                     Для AUX    : 376  
                     Для NUL    : 375  
                     Для LST    : 374 (принтер)  
                     Для PRN    : 373 (принтер)  
    положение в каталоге - порядковый номер от начала каталога.
 
 
                  Дисковая область.  
 
Для каждого устройства (кроме символьных) в памяти отводится   
1002 байт (размер сектора, может отличаться от 1000 б)
для размещения FAT и 52 байт для размещения параметров  
устройства и промежуточных данных.  
Все числа даны в восмеричной системе.  
--------------------------------------------------------------
смещение!            назначение  
--------------------------------------------------------------  
   0    ! размер сектора в байтах  
   2    ! размер кластера в секторах  
   4    ! количество копий FAT  
   6    ! максимальное количество элементов в каталоге  
   10   ! общее число секторов  
   12   ! идентификатор формата  
   14   ! размер FAT в секторах  
   16   ! число секторов на дорожке  
   20   ! количество сторон диска  
   22   ! зарезервировано  
   24   ! размер кластера в байтах  
   26   ! счетчик открытых файлов для этого устройства  
   30   ! конечный сектор каталога  
   32   ! начальный сектор каталога  
   34   ! последний свободный кластер на диске  
   36   ! биты настройки контроллера.  
   40   ! параметры дисковода  
   42   ! номер устройства  
   44   ! Используется DOS   
   46   ! адрес FAT в памяти  
   50   ! Используется DOS  
   52   ! Используется DOS  
   54   ! Тип операции :0-чтение,иначе запись  
--------------------------------------------------------------
 
                  ФУНКЦИИ 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,6,7,10,12 зарезервированы  
                       
                  Функция 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.  
 
                  Функция 22(18).  
Продолжить поиск файлов.  
(перед вызовом вызвать функцию 21, FCB не не изменять)  
вход: R4- адрес FCB.  
 
                  Функция 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).  
Получить параметры текущего устройства (кроме символьных).  
выход: R2-адрес списка параметров.  
(изменять данные запрещается).  
 
                  Функция 34(28).  
Аналогична функции 33(27),но для заданного устройства.  
вход: R0-номер устройства (1-дисковод "А"...)  
выход:  R2-адрес списка параметров.  
 
                  Функция 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).  
 
                  Функция 57(47).  
Получить адрес обмена с диском (адрес чтения/записи сектора).  
выход: R0-адрес.  
 
                  Функция 60(48).  
Получить версию DOS.  
выход: R0-версия:  
       ст.байт номер версии,мл.байл номер подверсии.  
 
                  Функция 61(49).  
Доступ к внутрисистемной информации.  
выход: R1-адрес области DOS.  
 
 
                  Функция 62(50).  
Получить адрес дисковой области.  
вход: R0-номер устр.  
выход:R1-адрес области.  
 
                  Функция 63.
Вызывается при неверном ЕМТ (на БК0010 >50, на БК0011(М) >130.
вых R4 - номер емт функции.Программа обработки должна  
оканчиваться командой RTS PC.
                  Функция 64.
Получить доступ к командной строке.
Вых: 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-адрес строки.  
 
                  Функция 56.  
Обработка критических ошибок.  
вых:R0-символ:  
               I-игнорировать,  
               R-повторить,  
               А-отменить.  
 
 
              Все функции 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  
 
 
   С помощью функций возможен доступ к внутрисистемной   
информации:  
Смещения системных таблиц и специальных ячеек:  
6       адрес списка дисковых блоков.(адреса абсолютные)  
15 (1б) количество устройств прямого доступа системе.  
16 (1б) количество дисководов в системе.  
20      адрес рабочей области драйвера дисковода.  
22      значение стробирующего бита для принтера :  
        400-для БК0010, 40000-для БК0011.  
60      адрес начала DOS.  
64      адрес таблицы подпр.чтения сектора с устройства  
        (при старте устанавливается 160006 для всех устройств).  
66      адрес таблицы подпр.чтения секторов на логическом   
        уровне.(на уровне DOS)  
104 (1б)тип машины 0-БК0010, 1-БК0011М,2-БК0011.  
105 (1б)тип монитора 0-БК0010,1-БК0011М,2-БК0011.  
126     адрес списка имен символьных устройств.(имена   
        разделены нулевым байтом).  
130     адрес таблицы переходов для символьных устройств.   
164     верхний адрес пользовательского ОЗУ.  
166     адрес параллельного порта (при старте устанавливается   
        значение 177714).  
Остальные ячейки изменять нельзя ,т.к. это может привести к  
порче файловой системы или зависанию комьютера.
 
 

 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Дисковые Операционные Системы (DOS) » «DX-DOS v1.00» » Инструкция по ДОС (Файл 4) («DX-DOS v1.00» [DOSDOC4.TXT])
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225