-=RUS=- | Дата: Вторник, 22.04.2014, 22:04 | Сообщение # 1 |
 Генералиссимус
Группа: Администраторы
Сообщений: 352
Статус: Offline
| Коды операций 0 или 1 могут использоваться для перепаковки имени. При выполнении этих операций происходит перепаковка име- ни в буфер NAMBUF с логической обработкой. При этом команды смены устройства и режима записи будут отрабатываться сразу, а при командах удаления файла и вывода каталога их коды будут по- мещены в ячейку COMAND. Эти операции могут использоваться в программах, читающих или записывающих файлы, не пользуясь EMT36.
Как видно из таблицы, ANDOS имеет четыре дополнительных кода команд. По коду 200 происходит удаление файла с запросом (как и при использовании команды ANDOS "-"). По коду 202 происходит запись по другому адресу, т.е. в блоке параметров магнитофона указывается реальный адрес файла, а в ячейку ADRDIR (120152), описанную в разделе "Модуль связи с программой пользователя", помещается адрес для занесения в ка- талог. Код 203 используется оболочкой (и может использоваться другими программами) для быстрого чтения файла в случаях: если драйвер дисковода настроен, дисковод включен, нужный блок ката- лога загружен в память, и уже известно, где находится запись о нужном файле (ее адрес должен быть помещен в R2). Если при этом блок каталога находится вне буфера ANDOS, а в буфер загружен FAT, и номер блока FAT на диске (1) помещен в ячейку TEKBLK, чтение FAT также не будет производиться. По коду 204 на экран выводится каталог (как и при исполь- зовании команды ANDOS ":"). Кроме того, каталог выводится по всем резервным кодам (в том числе и по коду 4), однако исполь- зовать это недопустимо, так как в следующих версиях ANDOS воз- можно появление новых кодов команд.
В поля адреса, длины и имени помещаются соответствующие величины, причем при чтении длина не указывается, а адрес может быть нулевым, в этом случае файл читается по адресу, записанно- му в каталоге.
При выполнении большинства операций происходит поиск файла в каталоге, при этом по пустому имени вызывается файлер (вызов файлера происходит по ячейке FILER аналогично вызову оболочки и эмулятора MicroDOS по ячейкам MASTER и MDOSEM). После выбора файла с помощью файлера имя выбранного файла заносится в буфер имени NAMBUF и в поле имени блока параметров EMT36.
3.3.4. Завершение операции
После выполнения операции в байт ответа (а также в ячейку 301) помещается код ошибки. При работе с диском используются только два кода: "0" - операция завершена без ошибок, и "4" при любых ошибках и выполнении нестандартных операций (например та- ких как удаление или вывод каталога на экран). Именно из-за ко- да ошибки "4" после просмотра каталога и других дисковых опера- ций, вызываемых из монитора БК0010, выдается сообщение "ОШИБКА" (выход из нестандартных операций без ошибки недопустим, так как, например, в этом случае во многих текстовых редакторах после чтения каталога терялся-бы текст, находящийся в памяти). После чтения файла в поле имени текущего массива переписы- вается имя из поля имени, в поля адреса и длины текущего мас- сива помещаются соответствующие данные, взятые из каталога дис- ка (т.е. даже, когда явно указан адрес, в поле адреса текущего массива помещается адрес из каталога), в ячейку 264 помещается реальный адрес загрузки файла, а в ячейку 266 - его длина.
3.4. Модуль связи с программой пользователя
Модуль состоит из рабочих ячеек ANDOS и ячеек, содержащих адреса подпрограмм, используемых самой ANDOS, ее утилитами, и, возможно, программами пользователя. Гарантируется неизменение в последующих версиях ANDOS адресов в модуле связи.
3.4.1. Рабочие ячейки ANDOS
┌──────┬──┬──────┬─┬──────────────────────────────────────────┐ │Адрес │Дл│Метка │Т│ Назначение ячейки или массива │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120004│6 │DRV$A │S│Таблица параметров дисковода A: │ │ │ │ │ │ .WORD Задержка опускания головки │ │ │ │ │ │ .WORD Задержка шага │ │ │ │ │ │ .BYTE Дорожка прекоррекции │ │ │ │ │ │ .BYTE Тип дисковода. Единица в старшем│ │ │ │ │ │ бите - 80 дорожек, в 7 бите - 1 сторона).│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120012│6 │DRV$B │S│Таблица параметров остальных дисководов. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120020│66│DRVTAB│S│Рабочая область драйвера НГМД (описание│ │ │ │ │ │см. в приложении "Контроллер дисковода"). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120106│ 2│DRIVER│S│Адрес входа "чтение/запись блока " драйве-│ │ │ │ │ │ра НГМД (160004). Может использоваться для│ │ │ │ │ │обслуживания нестандартных устройств, на-│ │ │ │ │ │пример виртуального диска). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120110│ 2│IOBUFF│S│Адрес буфера ANDOS (125000). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120112│ 2│E36STK│S│Адрес вершины стека ANDOS (126476). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120114│11│NAMBUF│B│Буфер имени. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120150│ 2│SCREEN│I│Ячейка перехвата вывода на экран сообщений│ │ │ │ │ │ANDOS (Значение по умолчанию 0). При нену-│ │ │ │ │ │левом значении этой ячейки при выводе со-│ │ │ │ │ │общений вместо EMT 16 выполняется вызов│ │ │ │ │ │подпрограммы, адрес которой находится в│ │ │ │ │ │этой ячейке. Для запрета вывода на экран│ │ │ │ │ │достаточно поместить в SCREEN адрес любого│ │ │ │ │ │кода 207, например 100256 . При перезапус-│ │ │ │ │ │ке ANDOS ячейка SCREEN очищается. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120152│ 2│ADRDIR│I│Адрес, помещаемый в каталог. Используется│ │ │ │ │ │при исполнении EMT36 с кодом операции 202 │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120154│ 1│DEVICE│P│Текущее устройство (0-@:, 1-32 - A:-Z:). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120155│ 1│DEVTEK│P│Временное текущее устройство. Совпадает с│ │ │ │ │ │DEVICE при запуске операции, изменяется│ │ │ │ │ │при явном указании устройства в имени. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120162│ 2│SIZE │O│Общее количество кластеров на диске. Опре-│ │ │ │ │ │деляется подпрограммой INIDRV после считы-│ │ │ │ │ │вания таблицы параметров из загрузчика. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120166│ 2│TEKBLK│O│Номер блока диска, находящегося в буфере. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120170│ 2│VERS │K│Версия ANDOS (для V3.1 - 100466) │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120127│ 1│ATTRIB│I│Аттрибут файла, присваиваемый при записи. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120130│ 1│SUBDIR│I│Номер катал., в котор. будет помещен файл.│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120132│ 2│DATE │S│Системная дата (присв. файлу при записи). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120134│ 2│PALET │S│Палитра, уст. на БК11(М) при перезапуске. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120140│ 1│WREGIM│P│Режим записи (код буквы "П" на любом реги-│ │ │ │ │ │стре (120) - перезапись, "Д" (104) -дубль,│ │ │ │ │ │другой код - вывод запроса). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120141│ 1│TEKREG│P│Текущий режим записи. Эти две ячейки очень│ │ │ │ │ │похожи по своей работе на DEVICE и DEVTEK.│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120142│ 2│CONFIG│K│Конфигурация ЭВМ (60000 - БК11(М), 140000-│ │ │ │ │ │БК10+16, 140002 - БК10+8, 0 - БК10+4). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120146│ 2│USRERR│I│Ячейка перехвата сообщений об ошибках. См.│ │ │ │ │ │раздел "Обработка ошибок". │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120155│ 1│VD$ON │S│Ненулевое значение в этой ячейке разрешает│ │ │ │ │ │подключение виртуального диска при загруз-│ │ │ │ │ │ке на БК11(М). Адрес VD$ON совп. с DEVTEK.│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120164│ 1│COMAND│P│Команда EMT36. В эту ячейку заносится код│ │ │ │ │ │команды из первого байта блока пар. EMT36,│ │ │ │ │ │он может изменятся командами ANDOS. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120172│ 2│MASTER│K│Признак включения/адрес оболочки. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120174│ 2│FILER │K│Признак включения/адрес файлера. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120176│ 2│MDOSEM│K│Признак включения/адрес эмулятора MicroDOS│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120244│12│USER │I│Ячейки, восстанавливаемые при перезапуске│ │ │ │ │ │или EMT14. Значение первой ячейки записы-│ │ │ │ │ │вается по адресу из второй, 3->@4, 5->@6. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120314│ 2│INIPRN│K│Адрес подп. инициализации принтера. Вызов:│ │ │ │ │ │CALL @120312 .WORD 120314 . Бит C означает│ │ │ │ │ │отсутствие драйвера принтера. Рег.не сохр.│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120316│ 2│OUTPRN│K│Адрес п/п вывода на принтер байта из R0 с│ │ │ │ │ │перекодировкой в соотв. с тек. кодовой та-│ │ │ │ │ │блицей. Перед LF (12) авт. вывод. CR (15).│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120320│ 2│GRFPRN│K│Адрес п/п выв. на принтер байта из R0 без│ │ │ │ │ │перекодировки (напр. для печати графики). │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120322│ 1│XY$FIL│S│(Кол-во столбцов)X(кол-во строк в файлере)│ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120323│ 1│ST$FIL│S│Количество текстовых строк файлера. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120324│ 1│W$FIL │S│Ширина окна файлера в байтах. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120325│ 1│H$FIL │S│Высота окна файлера в строках. │ ├──────┼──┼──────┼─┼──────────────────────────────────────────┤ │120326│ 2│AD$FIL│S│Смещение левого верхнего угла файлера, от │ │ │ │ │ │начала экрана (в байтах). │ └──────┴──┴──────┴─┴──────────────────────────────────────────┘ Типы ячеек, указанные в графе "Т": S - параметр, устанав- ливаемый пользователем или утилитой ANSETUP, и неизменяемый AN- DOS, B - буфер, К - неизменяемая константа, P - переменная, I - входной параметр, О - выходные данные (и переменная).
Обращаем Ваше внимание на изменения назначения битов в ячейках типа дисковода таблиц параметров DRV$A и DRV$B.
3.4.2. Ячейки адресов подпрограмм
В ячейках 120200-120236 и 120260-120312 расположены адреса подпрограмм ANDOS, которые используются утилитами ANDOS и могут быть использованы программами пользователя. Самой ANDOS эти ячейки не используются. В следующих версиях ANDOS список ячеек будет расширен, однако адреса ячеек, приведенных в этом описа- нии, останутся без изменений.
┌────────┬────────┬───────────────────────────────────────────┐ │ INIDRV │ 120204 │ Инициализация работы с диском │ │ INIT1 │ 120206 │ Инициализ. рабочей области драйвера КНГМД │ │ RWBLOK │ 120226 │ Чтение/запись │ │ RWBUF │ 120222 │ Чтение/запись в буфер ANDOS с кэшированием│ │ RWBUF1 │ 120224 │ Чтение в буфер без кэширования │ │ DIRENT │ 120212 │ Поиск элементов каталога │ │ DIREN2 │ 120214 │ Поиск заполненных элементов каталога │ │ DIRFIN │ 120216 │ Поиск файла в каталоге │ │ DIRFRE │ 120220 │ Поиск свободного элемента каталога │ │ RDFAT │ 120230 │ Чтение FAT с диска │ │ WRFAT │ 120232 │ Запись FAT на диск │ │ GETFAT │ 120234 │ Распаковка ячейки FAT │ │ SETFAT │ 120236 │ Запись в ячейку FAT │ │ ERASE1 │ 120210 │ Удаление файла │ │ FRCLAS │ 120202 │ Поиск пустого кластера │ │ RWCLAS │ 120200 │ Чтение/запись кластера │ ├────────┼────────┼───────────────────────────────────────────┤ │ RUNNER │ 120312 │ Вызов подпрограммы с проверкой целостности│ │ EXIST │ 120270 │ Открытие файла для записи (Перезап./Дубль)│ │ DOUBLE │ 120264 │ Переименование файла в .BAK │ │ ENDWRT │ 120266 │ Закрытие файла │ │ ERASE2 │ 120310 │ Удаление цепочки из FAT. │ │ DIRFI1 │ 120302 │ Поиск файла в каталоге (с файлером) │ │ DIRFI2 │ 120260 │ Поиск файла в каталоге по имени из NAMBUF │ │ FIND │ 120300 │ Поиск файла в каталоге с выдачей сообщения│ │ CONNAM │ 120274 │ Перепаковка и логическая обработка имени │ │ DONAME │ 120272 │ Поиск команд и перепаковка имени │ │ ENAME │ 120262 │ Поиск конца строки и точки │ │ FRCLA1 │ 120276 │ Поиск пустого кластера, нач. от указанного│ │ RDBLOK │ 120304 │ Чтение блока в буфер │ │ WRBLOK │ 120306 │ Запись блока из буфера │ │ PRT1 │ 120330 │ Вывод строки символов на экран │ └────────┴────────┴───────────────────────────────────────────┘
INIDRV - инициализация работы с диском
Вызов: CALL @120204 Результат: Кол-во кластеров -> SIZE, бит "C" - диск не в формате ANDOS.
Процедура используется в начале любой дисковой операции и выполняет следующие действия: инициализирует рабочую область драйвера КНГМД, устанавливает, в соответствии с ячейкой DEVTEK, параметры дисковода по одной из таблиц: DRV$A (для A:) или DRV$B (для остальных устройств), считывает таблицу параметров диска из загрузчика, проверяет соответствие некоторых ячеек этой таблицы эталону, и если его нет (диск не в формате ANDOS) выходит с установленным битом "C", устанавливает режимы "1/2 стороны" и "вкл/выкл пропуска дорожек" (пропуск дорожек включа- ется только в случае если на 80-дорожечном дисководе читается диск, размер которого не превышает 860. блоков на двухсторон- нем, и 430. на одностороннем диске). Необходимо отметить, что некоторые параметры (количество повторов при ошибке, количество секторов на дорожке, размер сектора) в DRVTAB являются констан- тами и не изменяются ANDOS, поэтому и программа пользователя не должна изменять их (а в случае изменения должна потом их восс- танавливать). После выполнения операции в буфере находится ну- левой блок диска, при этом ячейка количества сторон (IOBUFF+32) уменьшена в два раза.
INIT1 - Инициализация рабочей области драйвера НГМД.
Вызов: CALL @120206 Портит: R2
Функция вызывается из INIDRV и выполняет действия, анало- гичные функции "Инициализация рабочей области" драйвера НГМД (очищаются регистр 177130 и поля CSRW, TRKTAB, FLAGS). Назначе- ние полей рабочей области см. в приложении "Контроллер дисково- да".
|
|
| |