Закрыть окно
Список других документов библиотеки Серкова
B21C-B22F Копирование имени файла в поле описания файла в
Каталоге. Продвинуть индекс к полю имени файла.
Скопировать в него 30-и байтное имя файла.
Перезагрузить индекс в Каталоге и выйти.
B230-B239 Продвижение индекса к следующему полю описания
файла в секторе Каталога. Прибавить 35(длину поля)
к индексу. Проверить, не достигнут ли конец сектора
и вернуться в вызывающую программу.
B23A-B243 Переключение на второй проход при сканировании
Каталога. Если идет 1-й проход, то переключиться
на 2-й и перейти на ¤B1D8. Если идет 2-й проход, то
выйти из мененджера файлов с ошибкой DISK FULL.
B244-B2C2 Выделение сектора на диске.
Есть свободный сектор на текущем треке ?
Если нет, то перейти на ¤B26A для поиска нового
трека.
B249 Иначе выполнить декремент номера сектора для получения
номера следующего сектора. Выполнить циклический сдвиг
битовой маски трека на 1-у позицию и получить бит
флажок занятости этого сектора. Если сектор занят, то
вернуться на ¤B249 для следующего шага цикла.
Иначе инкремент счетчика секторов в файле, вернуть
номер сектора(номер трека в яч. ¤B5F1). Выйти в
вызывающую программу.
B265 Сигнализировать об отсутствии в даннй момент трека,
который может быть использован.
B26A Сбросить флажок выделения сектора, чтобы дать
возможность провести по меньшей мере один полный
просмотр всех треков в поисках свободного сектора.
Прочитать сектор VTOC.
B272 Получить из него номер последнего занятого трека и
прибавить значение направления (+1 или -1), чтобы
получить номер слежующего, подлежащего обследованию,
трека. Вернулись ли мы к треку 0 ? Если да, то
перейти на ¤B284. Иначе, миновали ли мы трек 34 ?
Если да, то изменить направление на противоположное и
перейти на ¤B28E.
B284 К треку 0 мы подошли 2-й раз ? (проверить флажок
заполнения). Если да, то выйти с ошибкой DISK FULL.
Иначе установить флажок заполнения, чтобы запомнить
эту ситуацию. Установить направление "вперед"(+1).
B28E Начать с трека номер 17+ или -1. Вычислить индекс
его битовой карты. Скопировать в рабочую область
мененджера файлов эту битовую карту из VTOC, чтобы
определить занятость трека. Если свободных секторов
нет, то перейти на ¤B272 для проверки следующего трека.
Иначе приравнять номер сектора номеру последнего
свободного сектора и перейти на ¤B249 для включения
в файл этого сектора.
B2C3-B2DC Освобождение занятых секторов на текущем треке и
контрольная запись VTOC. Был ли трек добавлен к
файлу ? Если нет, то выйти в вызывающую программу.
Иначе прочитать VTOC и получить номер сектора,
который может быть использован(число сдвигов карты
во время заполнения). Вызвать ¤B2DD для сдвига
битовой карты в обратном направлении и слияния ее
с битовой картой VTOC. Сигнализировать о том, что
трек не заполнялся. Выйти в вызывающую программу.
B2DD-B2FF Освобождение одного или более секторов путем сдвига
битовой маски в области заполнения мененджера файлов
и введения ее в битовую карту VTOC.
(если C=1, то освобождается также текущий сектор.
Выполнить один раз сдвиг всей 4-х байтной битовой
маски трека. Повторить столько раз, сколько было
заполнено секторов.
B300-B35E Сосчитать позицию файла. Устанавливает номер про-
шедшей записи в списке параметров менеджера файлов
в рабочей области и в смещениях секторов. Очищает
верхнюю часть сещений секторов.
Представляет в расширенном формате 16 бит как ука-
зано ниже:
3-х байтовый номер позиции файла = номер записи +
длина записи. Прибавляет байт OFFSETS из списка
параметров к содержимому трех байт позиции файла:
¤B5E4-¤B5E6. Возврат в вызвавшую программу.
B35F-B37D Выходы по ошибке (RC-код возврата).
B35F RC=1 "язык недоступен системе"
B363 RC=2 "ошибка в диапазоне (не тот тип операции FM)"
B367 RC=3 "--//-- (не тот подтип операции для FM)"
B36B RC=4 "запись закрыта"
B36F RC=5 "конец данных"
B373 RC=6 "файл не найден"
B377 RC=9 "диск полон (все файлы закрыты)"
B37B RC=A "файл закрыт на запись)"
B37F-B396 Выход из менеджера файлов.
B37F Выход без ошибки. Взять код возврата 0. Очистить
флажок переноса (C=0) и перейти на ¤B386.
B385 Установить флаг переноса (C=1) инициирующий ошибку
Записать код возврата (RC, как в таблице) в список
параметров менеджера файлов. Очистить регистр сос-
тояния монитора (¤48) после возможной порчи RWTSом
Переписать рабочую область менеджера файлов в бу-
фер файла (¤AE7E). восстановить флаг состояния
процессора и регистр указателя стека (P и S). Вый-
ти в программу, вызвавшую менеджер файлов (FM).
B397-B3A3 Многоцелевая область мененджера файлов.
B397 Трек/сектор текущего сектора Каталога.
B39B Область сохранения регистра S.
B39C Индекс Каталога.
B39D Счетчик строк Каталога / Флажок просмотра Каталога.
B39E Маска LOCK/UNLOCK / Флажок заполнения.
B3A0 4-х байтная маска, используемая в команде INIT для
освобождения целого трека в битовой карте VTOC.
B3A4-B3A6 Таблица десятичного преобразования(1,10,100).
B3A7-B3AE Таблица имен типов файлов, используемая в команде
CATALOG. Типы файлов T,I,A,B,S,R,A,B относятся к
16-ричным значениям: ¤00,¤01,¤02,¤04,¤08,¤10,¤20 и
¤40 соответственно.
B3AF-B3BA Текст "DISK VOLUME" в кодах ASCII (задом наперед).
Используется в команде CATALOG.
B3BB-B4BA Буфер сектора VTOC.
B3BC Трек/сектор первого сектора Каталога.
B3BE Номер версии DOS.
B3C1 Номер тома дискеты.
B3E2 MAX. количество указателей в одном секторе Т/С списка.
B3EB Номер следующего заполняемого трека.
B3EC Направление заполнения (+1 - в сторону увеличения
номеров треков, -1 - в обратном направлении).
B3EF Количество треков на диске.
B3F0 Количество секторов на одном треке.
B3F1 Размер сектора в байтах.
B3F3 Битовая карта треков (по 4 байта на каждый из 35-и
треков).
B4BB-B5BA Буфер сектора Каталога.
B4BC Трек/сектор следующего сектора Каталога (цепочечный
указатель).
B4C6 Первое поле описания файла:
B4C6 Трек Т/С списка;
B4C7 Сектор Т/С списка;
B4C8 Тип файла и бит защиты;
B4C9 Поле имени файла (30 байт);
B4E7 Размер файла в секторах, включая Т/С список файла.
B5BB-B5D0 Список параметров мененджера файлов.
B5BB Код операции.
B5BC Подтип операции.
B5BD 8 байт различных параметров, в зависимости от кода
операции.
B5C5 Код возврата.
B5C7 Адрес рабочей области мененджера файлов.
B5C9 Адрес буфера сектора Т/С списка.
B5CB Адрес буфера сектора данных.
B5CD Адрес следующего буфера DOS из цепочки(не использован).
B5D1-B5FD Рабочая область мененджера файлов.
B5D1 Трек/сектор первого сектора Т/С списка файла.
B5D3 Трек/сектор текущего сектора Т/С списка файла.
B5D5 Флажки: ¤80=Т/С список нуждается в контрольной записи.
¤40=Сектор данных нуждается в контрольной
записи.
¤20=Сектор VTOC нуждается в контрольной записи.
¤02=Последней операцией была запись.
B5D6 Трек/сектор текущего сектора данных.
B5D8 Индекс поля описания файла, выраженный в секторах
Каталога.
B5D9 Индекс поля описания файла внутри сектора Каталога.
B5DA Количество секторов, описанных в одном секторе
Т/С списка.
B5DC Относительный номер первого сектора в текущем секторе
Т/С списка.
B5DE Относительный номер +1 последнего сектора в текущем
секторе Т/С списка.
B5E0 Относительный номер последнего прочитанного сектора.
B5E2 Длина сектора в байтах.
B5E4 Смещение сектора, содержащего позицию файла(3 байта).
B5E7 Смещение байта в этом секторе.
B5E8 Длина записи из команды OPEN.
B5EA Номер записи.
B5EC Смещение байта в записи.
B5EE Количество секторов в файле.
B5F0 Область заполнения секторов (6 байт):
- номер следующего заполняемого сектора(сч-ик сдвигов);
- номер заполняемого трека;
- 4-х байтная битовая карта трека, циклически
сдвигаемая для получения номера следующего свободного
сектора.
B5F6 Тип файла.
B5F7 Номер разъема * 16.
B5F8 Номер НГМД.
B5F9 Номер тома (в обратном коде).
B5FA Номер трека.
B5FE-B5FF Не использованы.
B600-B6FF Начало копии Загрузчика 2/RWTS.
B600 Копия Загрузчика 1.
B65D Область "заплат" DOS 3.3.:
B65D Флажок "заплаты" APPEND;
B65E "Заплата" APPEND. Обращение в эту точку происходит
тогда, когда драйвер мененджера файлов получает
ошибку, отличную от ошибки END OF DATA.
Найти и освободить буфер файла. Сбросить флажок
APPEND. Получить номер ошибки и перейти к выводу
сообщения (¤A6D2);
B671 "Заплата" APPEND. Обращение в эту точку происходит
из программы обработки APPEND для инкремента номера
записи, если флажок APPEND установлен, и для сброса
флажка. Выйти через POSITION;
B686 "Заплата" VERIFY. Обращение в эту точку происходит
из программы ввода/вывода ряда байтов для выхода
через VERIFY после команд SAVE и BSAVE;
B692 "Заплата" APPEND. Обращение в эту точку происходит
из драйвера мененджера файлов, если код возврата
соответствовал ошибке END OF DATA. Проверить, не
равна ли 0 позиция файла. Если нет, то установить
флажок APPEND и вернуться в вызывающую программу.
Если да (начало файла), то скопировать в списке
параметров мененджера файлов номер записи и
смещение байта, вернуть в вызывающую программу
нулевой байт даннйх.
B6FE Адрес первой страницы в Загрузчике 2.
B6FF Количество секторов(страниц) в Загрузчике 2.
B700-B749 Начальный Загрузчик DOS 2-й ступени.
Заполнить список параметров RWTS для чтения DOS с
диска. Вызвать Чтение/Запись группы страниц(¤B793).
Создать новый стек. Вызвать SETVID(¤FE93) и
SETKBD(¤FE89). Выйти через "холодный" старт DOS
(¤9D84).
B74A-B78C Запись DOS на треки 0-2.
Заполнить список параметров RWTS для записи DOS
на диск. Вызвать Чтение/Запись группы страниц
(¤B793). Выйти в вызывающую программу.
B78D-B792 Не использованы.
B793-B7B4 Чтение/запись группы страниц.
Вызвать RWTS через внешнюю точку входа (¤B7B5).
Выйти в вызывающую программу.
B7B5-B7C1 Запрещение прерываний и вызов RWTS.
B7C2-<7D5 Установка параметров для записи DOS.
B7D6-B7DE Обнуление текущего буфера(256 байт), адрес которого
содержится в яч. ¤42-43.
B7DF-B7E7 Список параметров начального Загрузчика DOS
2-й ступени.
B7DF Не использован.
B7E0 Число страниц в Загрузчике DOS 2-й ступени.
B7E1 Число секторов для чтения/записи.
B7E2 Число страниц в Загрузчике 1 DOS.
B7E3 Счетчик страниц DOS для команды INIT.
B7E4 Указатель списка параметров RWTS.
B7E6 Начальный адрес Загрузчика 1-ой ступени.
B7E8-B7F8 Список параметров RWTS.
B7E8 Тип таблицы. Должен быть равен ¤01.
B7E9 Номер разъема * 16.
B7EA Номер НГМД.
B7EB Предполагаемый номер тома.
B7EC Номер трека.
B7ED Номер сектора.
B7EE Указатель таблицы характеристик устройства.
B7F0 Указатель буфера данных пользователя для чтения/записи.
B7F2 Не использован.
B7F3 Счетчик байтов отдельного сектора (использовать ¤00
для 256).
B7F4 Код команды: 0=SEEK(поиск), 1=READ(чтение),
2=WRITE(запись), 4=FORMAT(разметка).
B7F5 Код ошибки: (действителен, если установлен перенос)
¤10=WRITE PROTECT(защита от записи);
¤20=VOLUME MISMATCH(несовпадение тома);
¤40=DRIVE ERROR(ошибка накопителя);
¤08=INIT ERROR(ошибка инициализации).
B7F6 Найденный номер тома.
B7F7 Найденный номер разъема.
B7F8 Найденный номер накопителя.
B7F9-B7FA Не использованы.
B7FB-B7FE Таблица характеристик устройства.
B7FB Тип устройства. Должен быть равен ¤00.
B7FC Число фаз трека. Должно быть равно ¤01.
B7FD Счетчик времени включения двигателя. Должны быть
равны ¤EF, ¤D8.
B7FF Не использован.
B800-B829 Программа PRENIBBLE("Предварительного" расщепления).
Преобразует 256 8-ми разрядных слов в
342 6-и разрядных слова в форме 00хххххх. Указатель
страницы, подлежащей преобразованию записан в
яч.¤3E-3F. На выходе: A-регистр - не определен.
X=¤FF, Y=¤FF, C=1.
B82A-B8B7 Программа WRITE. Записывает предварительно
"расщепленные" данные из первичного и вторичного
буферов на диск. Вызывает ПП записи байта.
Записывает 5 байт автосинхронизации, адресное поле
сектора и поле данных. Использует Таблицу трансляции
записи (¤BA29).
На входе: X-регистр - номер разъема * 16.
На выходе: В случае ошибки C=1.
Если ошибки нет, то
A-регистр не определен;
X-регистр не изменяется;
Y=¤00, C=0.
Используются яч. ¤26, ¤27, ¤678.
B8B8-B8C1 ПП записи байта.
Машинная программа с критичным временем выполнения,
предназначенная для записи байтов с интервалом
в 32 такта.
B8C2-B8DB Программа POSTNIBBLE (Последующего декодирования).
B8DC-B943 Программа READ. Прочитать сектор с диска и сохранить
его в первичном и вторичном буферах (сначала
используется вторичный буфер от старших адресов к
младшим, затем - первичный буфер от младших адресов
до старших). Если нет ошибок, то C=0. Используются
яч. ¤26.
B944-B99F Программа RDADR - чтение адресного поля сектора.
Используются ячейки: ¤2F- номер тома.
¤2Е- номер трека.
¤2D- номер сектора.
¤2C- контрольная сумма поля.
¤26-27.
B9A0-B9FF Программа SEEKABS. Перемещение головки к требуемому
треку. Вызывает программу задержки перемещения
привода (¤BA00).
На входе: X - номер разъема * 16;
A - номер требуемого трека("полутрека
для однофазного диска).
¤478 - номер текущего трека.
На выходе: A и Y не определены;
X не изменяется;
¤2A и ¤478 - номер конечного трека
¤27 - номер исходного трека (если
перемещение понадобилось).
BA00-BA10 Программа задержки перемещения привода головки.
На входе: A - число 100-микросекундных интервалов;
¤46-47 - значение счетчика времени
включения двигателя(¤EF,¤D8) из
Таблицы характеристик устроуства.
¤478 - номер текущего трека.
На выходе: A=0, X=0, C=1, Y не изменяется.
BA11-BA28 Таблица задержек перемещения привода головки.
Используется при включении/выключении фаз
шагового двигателя.
BA29-BA68 Таблица трансляции записи.
BA69-BA95 Не использованы.
BA96-BAFF Таблица трансляции чтения.
BB00-BBFF Первичный буфер.
BC00-BC55 Вторичный буфер.
BC56-BCC3 Запись адресного поля во время инициализации.
Вызывает программу записи двойного байта.
На входе: X- номер разъема * 16;
Y- число синхробайт;
¤3E =¤AA;
¤3F =номер сектора;
¤41 =номер тома;
¤44 =номер трека;
На выходе: A не определен;
X не изменяется;
Y=¤00; перенос установлен (C=1).
BCC4-BCDE Программа записи двойного байта.
Машиннаф программа с критичным временем выполнения,
которая кодирует адресную информацию в нечетных и
четных битах и записывает их с интервалами в 32
такта.
BCDF-BCFF Не использованы.
BD00-BD18 Главный вход в RWTS.
Сохранить регистры A и Y в яч.¤48,49 в качестве
указателя IOB. Установить max. число рекалибровок =1
и число выходов на заданный трек =4. Проверить,
изменился ли номер рзъема. Если нет, то перейти на
SAMESLOT (¤BD34).
BD19 Модифицировать номер разъема в IOB и ожидать остановки
старого НГМД.
BD34 ПП SAMESLOT("тот же разъем"). Включить режим чтения и
читать с задержками, чтобы проверить, вращается ли
диск. Сохранить результаты теста и включить двигатель
в любом случае.
BD54 Перенести указатели из IOB на нулевую страницу для
использования в будущем:
- таблицы характеристик устройства в яч.¤3C-3D;
- буфера данных в яч.¤3E-3F.
Ввести в яч.¤47 время включения двигателя ¤D8.
Проверить, изменился ли номер НГМД. Если нет, то
перейти на ¤BD74. Если да, то изменить результаты
теста, чтобы показать, что НГМД был выключен.
BD74 Выбрать нужный НГМД и сохранить его номер в старшем
бите яч.¤35(1- НГМД1, 0- НГМД2). Получить результаты
теста. Если НГМД был включен, то перейти на ¤BD90.
Ожидать, пока разрядится конденсатор, используя
программу MSWAIT (¤BA00).
BD90 Получить номер требуемого трека и перейти к этому
треку, используя программу MYSEEK (¤BE5A). Вновь
проверить результаты теста и, если НГМД был включен,
то перейти на TRYTRK (¤BDAB). Иначе включить задержку,
чтобы дать возможность двигателю набрать скорость.
BDAB-BDBB Программа TRYTRK. Получить код команды. Если код
нулевой, то выйти через ALLDONE (BE46), выключая
НГМД и возвращаясь в вызывающую программу.
Если код =4, то перейти на FORMDSK (¤BE0D).
Иначе выдвинуть младший бит в перенос и сохранить
содержимое регистра состояния (C=1 - чтение,
C=0 - запись). Если задана операция записи, то
данные предварительно преобразуются путем вызова
PRENIB16 (¤B800).
BDBC Установить максимальное число попыток =48 и прочитать
адресное поле, используя RDADR16 (¤B944). Если чтение
прошло успешно, то перейти на RDRIGHT (¤BDED). Если
чтение с ошибкой, то выполнить декремент числа попыток
и если попытки еще остались, то прочитать еще раз.
Иначе подготовить рекалибровку, выполнить декремент
счетчика рекалибровок. Если результат =0, то
сигнализировать об ошибке НГМД через DRVERR (¤BE04).
Иначе вновь приравнять 4 число повторных выходов на
трек, рекалибровать привод головки и повторить чтение.
BDED-BE03 Программа RDRIGHT. Проверить, выполнено ли чтение
с трека с верным номером. Если да, то перейти на
RTTRK (¤BE10). Если нет, то установить верный номер
трека через SETTRK (¤BE95) и выполнить декремент
счетчика числа выходов на трек. Если результат <>0,
то повторно выйти на трек. Иначе выполнить
рекалибровку.
BE04-BE0A Программа DRVERR. Очистить стек и регистр состояния.
Загрузить в A ¤40 (ошибка НГМД). Перейти на
HNDLERR (¤BE48).
BE0B-BE0C Использованы для ветвления на ALLDONE (¤BE46).
BE0D-BE0F Программа FORMDSK.
Безусловный переход на DSKFORM (¤BEAF).
BE10-BE25 Программа RTTRK. Сравнить найденный номер тома с
требуемым. Если том не был указан, то ошибки нет.
Если номер тома не соответствует, то загрузить
в регистр A ¤20 (ошибка не совпадения тома) и
выйти через HNDLERR (¤BE48).
BE26-BE45 Программа CRCTVOL. Проверить, найден ли сектор с
верным номером. Использовать таблицу чередования
секторов (¤BFB8) для программного чередования
секторов. Если номер сектора неверен, то попытаться
еще раз через TRYADR (¤BDC1). Если номер верный, то
выяснить, какая операция требуется. Если запись, то
перейти на WRITE (¤BE51). Иначе прочитать данные,
используя READ16 (¤B8DC). Если чтение прошло
успешно, то декодировать данные, используя POSTNB
(¤B8C2) и вернуться в вызывающую программу без
ошибок.
BE46-BE47 Программа ALLDONE. Миновать команду установки
переноса в HNDLERR.
BE48-BE50 Программа HNDLERR. Установить перенос. Сохранить в
IOB содержимое регистра A в качестве кода возврата.
Выключить двигатель. Вернуться в вызывающую
программу.
BE51-BE59 Программа WRITE. Записать сектор, используя WRITE16
(¤B82A). Если запись прошла успешно, то выйти через
ALLDONE (¤BE46). Если при записи произошла ошибка,
то загрузить в регистр A ¤10 (ошибка защиты от
записи) и выйти через HNDLERR (¤BE48).
BE5A-BE8D Программа MYSEEK. Проводит необходимую подготовку
для перехода на программу SEEKABS. Определяет число
фаз для трека и сохраняет информацию о треке в
соответствующей ячейке, зависящей от номера разъема.
.ст DOS (логика)7