Закрыть окно         Список других документов библиотеки Серкова

.км Описание обращений к RWTS и FILE MENEDGER из программ 
.км пользователя; Формат буферов DOS.

.шп8
.цв
Вызов RWTS.

.шп0
.лв

Предварительно надо вызвать две ПП:

- JSR ¤03E3 - в регистры Y и A загружается адрес УТ(IOB),

в Y - мл., в A - ст.байт адреса. Результат ее работы можно сохранить в двух ячейках нулевой страницы, чтобы иметь возмжность модифицировать УТ и получать выходные величины после вызова RWTS.

- JSR ¤03D9 - это главный вход в RWTS. Перед этим должен быть загружен адрес УТ в регистры Y и A.


.лв
______________Управляющая таблица DOS (IOB).

_БАЙТ__О_П_И_С_А_Н_И_Е
__00___Тип таблицы, должен дыть ¤01;
__01___Номер разъема * 16;
__02___Номер НГМД (1 или 2);
__03___Ожидаемый номер тома (00 - любой том);
__04___Номер трека;
__05___Номер сектора;
06-07__Адрес Таблицы Характеристик Устройства(ТХУ);
08-09__Адрес буфера для команд READ/WRITE;
__0A___Не использован;
__0B___Счетчик байтов для отдельного сектора;
__0C___Код команды:____¤00_-_SEEK__(поиск)
_______________________¤01_-_READ__(чтение)
_______________________¤02_-_WRITE_(запись)
_______________________¤04_-_FORMAT(разметка без записи DOS,
_____________________________оглавления тома и каталога);
__0D___Код возврата:___¤00_-_C=0_-_норма
__________________________C=1
_______________________¤08_-_ош.во время инициализации
_______________________¤10_-_защита от записи
_______________________¤20_-_ош.:не тот том
_______________________¤40_-_сбой НГМД
_______________________¤80_-_ош.чтения(устаревшее);
__0E___Номер тома от предыдущего обращения(должен быть инициализирован);
__0F___Номер разъема от предыдущего обращения(д.б.и.);
__10___Номер НГМД от предыдущего обращения(д.б.и.).


_______________Таблица характеристик устройства.

_БАЙТ__O_П_И_С_А_Н_И_Е
__00___Тип устройства(для НГМД DISK II должен дыть ¤00);
__01___Количество фаз трека(для НГМД DISK II должен дыть ¤01);
02-03__Счетчик времени включения двигателя(¤EFD8 для DISK II).

_ПРИМЕЧАНИЕ: RWTS использует яч.¤48, которая используется 
_____________МОНИТОРом для сохранения регистра P.
_____________Яч.¤48 следует обнулять после каждого вызова RWTS.

.шп8
.цв
Вызов Мененджера Файлов.

.лв
.шп0

___Предварительно надо вызвать ПП:

_-_JSR ¤03DC - в регистры Y и A загружается адрес Списка параметров мененджера файлов. В Y - мл., в A - ст.байт адреса. Результаты ее работы можно сохранить в двух ячейках нулевой страницы, чтобы иметь возможность модифицировать список и получать результаты работы мененджера.

_-_JSR ¤03D6 - это главный вход мененджера файлов. Предварительно необходимо заполнить список параметров, в регистрах A и Y - адрес этого списка,

______ в регистре X - =0 если файл не найден, создать его;

_____________________<>0 если файл не найден, не создавать его.

_Обычно X=0 только при выполнениии OPEN.

_Программист должен предоставить мененджеру для каждого открытого файла по три буфера, разместив их в доступной области памяти. Вместе взятые эти 3 буфера занимают 557 байтов ОЗУ и должны передаваться мененджеру каждый раз, когда используется ассоциированный с ними файл.


.лв
_________________Список_параметров_Мененджера файлов.
                         (общий формат).

 БАЙТ  О П И С А Н И Е
  00   Тип вызова: 01=OPEN   05=DELETE   09=RENAME
                   02=CLOSE  06=CATALOG  0A=POSITION
                   03=READ   07=LOCK     0B=INIT
                   04=WRITE  08=UNLOCK   0C=VERIFY
  01   Подтип вызова для READ и WRITE:
                   00=Нет операции(вызов игнорируется),
                   01=READ или WRITE одного байта,
                   02=READ или WRITE ряда байтов,
                   03=POSITION+(READ или WRITE) одного байта
                   04=POSITION+(READ или WRITE) ряда байт
02-09  Специфические параметры.
  0A   Код возврата: 00 - C=0 - норма;
                          C=1
                     01 - Не использован(язык не доступен);
                     02 - Неверный тип вызова;
                     03 - Неверный подтип вызова(>4-х);
                     04 - Защита от записи;
                     05 - Конец данных;
                     06 - Файл не найден(создан, если X=0);
                     07 - Не тот том;
                     08 - Ошибка в/в;
                     09 - Диск полон;
                     0A - Файл защищен;
  0B   Не использован.
0C-0D  Адрес рабочей области мененджера(45 байт для сохранения       состояния мененджера между вызовами).
       Место для нее должно быть отведено, адрес должен 
       быть инициализирован.

0E-0F  Адрес 256-байтного буфера текущего трек/секторного спис       ка.
10-11  Адрес 256-байтного буфера текущего сектора данных.


Типы списка параметров при вызове.
----------------------------------

OPEN - определяет местонахождение файла или создает файл.
       За каждым OPEN должен следовать вызов POSITION.

БАЙТ   О П И С А Н И Е
На входе:
02-03  Длина записи или 0000, если длина переменная;
  04   Номер тома или 00, если он безразличен;
  05   Номер НГМД;
  06   Номер разъема;
  07   Тип файла: 00=T   01=I   02=A(Applesoft Basic)
                  04=B   08=R   10=S   20=A   40=B;
08-09  Адрес имени файла.
На выходе:
  07   Тип открытого файла;
  0A   Код возврата.


CLOSE - Записывает последние сектора, модифицирует каталог.
        Требуется для каждого OPEN.

БАЙТ   О П И С А Н И Е
На входе общий формат.
На выходе:
  0A   Код возврата.


READ  - Считывает байт или ряд байтов в буфер данных.
WRITE - Записывает байт или ряд байтов из буфера данных.

БАЙТ   О П И С А Н И Е
На входе:
02-03  (Подтип 03/04) Номер записи;
04-05  (Подтип 03/04) Смещение байта;
06-07  (Подтип 02/04) Кол-во байтов в ряду (для WRITE эта
       длина должна быть на 1 меньше действительной длины);
08-09  (Подтип 02/04) Адрес буфера для считывания ряда байт;
На выходе:
02-03  Номер записи текущей позиции в файле;      *
04-05  Смещение (в байтах) текущей позиции в файле;
  08   (READ, подтипы 01/03), Прочитанный байт;
  0A   Код возврата.

* Текущая позиция в файле модифицируется таким образом, чтобы
 указать на байт, следующий за прочитанными или записанными
 данными.


DELETE - определяет местонахождение и удаляет файл,
        освобождая его сектора.

БАЙТ   О П И С А Н И Е
На входе общий формат.
На выходе:
  0A   Код возврата.


CATALOG - выводит листинг каталога на выходное устройство

БАЙТ   О П И С А Н И Е
На входе общий формат.
05   Номер нгмд;
06   Разъем;
На выходе:
  0A   Код возврата.


LOCK - Защищает файл от записи.

БАЙТ   О П И С А Н И Е
На входе общий формат.
На выходе:
  0A   Код возврата.


UNLOCK - Снимает защиту с файла.

БАЙТ   О П И С А Н И Е
На входе общий формат.
На выходе:
  0A   Код возврата.


RENAME - Переименовывает файл.

БАЙТ   О П И С А Н И Е
На входе:
02-03  Адрес нового имени файла.
На выходе:
  0A   Код возврата.


POSITION - Вычисляет положение записи и/или смещение байта в
           файле. Выполняет позиционирование таким образом,
           что следующие чтение/запись начинаются с этой
           точки.
           Вызов POSITION(выполненный явно или неявно с
           помощью подтипов команд READ/WRITE) требуется
           перед первым вызовом READ/WRITE. Для нормального
           позиционирования на начало файла следует
           установить байты 02-05 в 00.

БАЙТ   О П И С А Н И Е
На входе:
02-03  Относительный номер записи для файлов с фиксированной
       длиной записи или 00. Первая запись файла имеет N'0000.
04-05  Относительное смещение байта в записи или в самом файле,
       если номер записи нулевой.
На выходе:
  0A   Код возврата.


INIT - Инициализирует дублирующую дискету: размечает треки,
       запи сывает копию DOS, создает Оглавление тома
       и каталог. Программа HELLO однако не записывается.

БАЙТ   О П И С А Н И Е
На входе:
  01   Первая страница копии DOS. Обычно ¤9D для 48-Кбатной
       машины.
  04   Номер тома новой дискеты.
  05   Номер НГМД.
  06   Номер разъема
На выходе:
  0A   Код возврата.


VERIFY - Проверяет, нет ли в файле "плохих" секторов.

БАЙТ   О П И С А Н И Е
На входе общий формат.
На выходе:
  0A   Код возврата.

.шп8
                    Формат буферов DOS.
.шп0

  БАЙТ   О П И С А Н И Е
000-0FF  Буфер сектора данных(256 байт);
100-1FF  Буфер трек/секторного списка(256 байт);
200-22C  Рабочая область мененджера файлов(45 байт);
22D-24A  Буфер имени файла(30 байт). Если первый байт ¤00, то
         буфер свободен;
24B-24C  Адрес рабочей области мененджера файлов;
24D-24E  Адрес буфера трек/секторного списка;
24F-250  Адрес буфера данных;
251-252  Адрес поля имени файла в следующем буфере цепочки
         буферов. Если данный буфер последний в цепочке, то
         это поле содержит нули.

 В целом один буфер DOS занимает 595 байт. Адрес первого буфера
содержится в двух первых байтах DOS(¤9D00 на 48-Кбайтном 
компьютере.


              Формат рабочей области мененджера файлов.

БАЙТ   О П И С А Н И Е 

00-01  Трек/сектор первого Т/С списка файла;
02-03  Трек/сектор текущего Т/С списка файла;
  04   Флажки:
          ¤80=Буфер Т/С списка изменен и нуждается в записи;
          ¤40=Буфер данных изменен и нуждается в записи;
          ¤02=Карта тома изменена и нуждается в записи;
05-06  Трек/сектор текущего сектора данных;
  07   Смещение(в секторах) поля описания данного файла в
       каталоге;
  08   Смещение(в байтах) поля описания данного файла в секторе
       каталога;
09-0A  Max. кол-во секторов данных в одном секторе Т/С списка;
0B-0C  Смещение первого сектора в текущем Т/С списке;
0D-0E  Смещение последнего сектора в текущем Т/С списке;
0F-10  Относительный номер сектора, прочитанного последним;
11-12  Размер сектора в байтах(256);
13-14  Текущая позиция, выраженная в секторах(относительная);
  15   Текущее смещение байта в данном секторе;
  16   Не использован;
17-18  Фксированная длина записи;
19-1A  Текущий номер записи;
1B-1C  Смещение байта в текущей записи;
1D-1E  Длина файла в секторах;
  1F   Следующий сектор данного трека, подлежащий обработке;
  20   Текущий обрабатываемый трек;
21-24  Битовая карта текущего трека(циклически сдвигаемая);
  25   Тип файла;
  26   Номер разъема * 16;
  27   Номер НГМД;
  28   Номер тома(в обратном коде);
  29   Номер трека;
2A-2C  Не использованы.

Каждый раз, когда мененджер заканчивает обслуживание вызова, онкопирует все свои переменные в свою рабочую область в буфере,предоставленном вызывающей программой. При каждом последующем вызове первое, что он делает - восстанавливает свои переменные из рабочей области.

.ст DOS (логика)1

Закрыть окно         Список других документов библиотеки Серкова