Закрыть окно Список других документов библиотеки Серкова
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