Научно-технический кооператив "Спрайт" г. Новосибирск 1992 ОПЕРАЦИОННАЯ СИСТЕМА "С П Р А Й Т" (версия 1.3) ВЕДОМОСТЬ ИЗМЕНЕНИЙ В ПРОГРАММНОЙ ДОКУМЕНТАЦИИ Ниже перечислены изменения, внесенные в программную до- кументацию "СПРАЙТ-ОС", по состоянию на 13.03.92. 1. Изменения в составе документации 12.12 RP.UTIL.TXT - добавлено описание программы PRINTER. 13.12 Добавлен файл VED.ADD.TXT - сводка временных описаний новшеств в системе, не включенные в основной текст. 18.12 RSP.DOS2/3.TXT - исправлена ошибка: поменялись места- ми значения признаков SEMP и IEMP в режиме вызова RW_FILE. 29.12 RSP.COM.TXT - модуль спецификации дополнен и вынесен в отдельный файл для возможности его использовния в ASM-файлах пользователя. 13.03 RP.UTIL.TXT - добавлено описание программ CONV и FC, дополнено описание MAKESYS (защита системы). RP.KBD.TXT - исправлено описание ввода строки для вер- сии 1.3. 29.04 RSP.COM.TXT - внесена коррекция интерфейса C.SCANNUM. 14.05 RSP.DOSx.TXT - внесена коррекция интерфейса CLOSE (ре- жим изменения имени/атрибутов); переупорядочены в 4 файла. 20.05 RP.COMx.TXT, RSP.DOS3.TXT - внесена коррекция формата даты и способов ее указания. 2. НОВЫЕ ВОЗМОЖНОСТИ АССЕМБЛЕРА 2.1. Код завершения Ассеблера Как и всякая программа, Ассемблер по окончании работы передает в переменную среды диалога #Q код завершения, ко- торый следует интерпретировать как битовую строку. Соответ- ствующий бит в ней выставлен в 1, если: [0] - ассемблирование прервано пользователем; [1] - были обнаружены ошибки при ассемблировании; [2] - ассемблирование прервано из-за фатальной ошибки; [3] - ассемблирование прервано из-за ошибки ввода-вывода; [4] - были ошибки в командной строке. (Нумерация битов справа налево). 2.2. Передача ключей и параметров из командной строки В автономном Ассемблере, начиная с версии 1.1, имеется возможность передавать через командную строку логические и числовые константы, которые можно использовать в ассембли- руемой исходной программе в качестве операндов в выражениях. Новый полный синтаксис командной строки: ASM[/ключи] src [obj [lst]] [-список_констант] Синтаксис списка констант совпадает с синтаксисом списка ключей, принятым в ОС "Спрайт" и разбирается стандартными средствами командного процессора. Таким образом, всего мо- жет быть задано 32 разноименных ключа, интерпретируемых ас- семблером как логические константы, и 32 параметра-числа. Возможность передачи строк в данной версии не предусмот- рена. В выражениях в исходном тексте допустимы операнды вида '?символ' и '%символ'. Значение операнда '?символ' равно $FFFF, если в списке констант есть одноименный ключ, иначе оно равно 0. Значение операнда '%символ' равно значению соответствую- щего параметра в списке констант, если он задан. В против- ном случае его значение не определено, и выдается ошибка. Новые директивы условного ассемблирования IFDEF и IFNDEF позволяют проверить, определена ли некоторая внешняя кон- станта. С их помощью также можно определить, описана ли данная метка в программе. Скобочные конструкции IFDEF/IFNDEF-ELSE-ENDIF аналогичны по структуре и смыслу конструкции IF-ELSE-ENDIF (DO-ELSE- FIN); заголовок имеет вид: IFDEF|IFNDEF %символ | ?символ | метка Если метка в тексте программы определена ниже директивы IFDEF/IFNDEF, в которой она использована, то эта метка бу- дет считаться неопределенной на первом проходе (даже если на на нее были ссылки выше по тексту) и определенной на втором. Механизм передачи констант Ассемблеру в ДОК в данной версии отсутствует. Пример использования внешних констант: Пусть в исходном файле T.ASM написано: ... IFDEF %O ORG %O ELSE ORG $1800 ENDIF ... IF ?D PHA LDA COUNTER JSR IOSUB.BYTEOUT PLA ENDIF ... и для ассемблирования используются такие командные строки: ASM T T1 ASM T T2 -O=2000 ASM T T3 -D Файлы T1.PRG и T3.PRG будут иметь стартовый адрес $1800, а T2.PRG - $2000. В программе T3.PRG будет отладочная вывод ячейки COUNTER. 2.3. Дополнения в командах условного ассемблирования В исходной программе допускаются вложенные директивы IF/ ELSE/ENDIF, всего до 8 одна в другой. Пример: IF TURBO IFDEF %O ORG %O ELSE ORG $7D00 ENDIF ENDIF Добавлены директивы: IF1 - истинна на первом проходе; IF2 - истинна на втором проходе; IFREL - истинна, если генерируется REL-файл; IFE <выр> - истинна, если выражение равно 0. Примеры: IF1 ;можно использовать для включения определений INCLUDE DEFINES.ASM ENDIF IFE ?D LOC $D000 ENDIF 2.4. Управление листингом Директива-переключатель LFC позволяет управлять выдачей листинга неассемблируемых фрагментов. По умолчанию LFC OFF. Директива REP теперь имеет два параметра: повторитель и символ. По умолчанию (без параметров) выводится 40 символов '*'. Примеры: REP ; С текущими параметрами REP 30 ; 30 текущих символов REP 50,'-' ; 50 символов '-' 2.5. Постфиксы внешних меток Разрешается вместо директив описания внешних меток EXTRN и ENTRY указывать специальные символы-постфиксы непосред- ственно при использовании или определении этих меток: METKA:: в поле определения равносильно ENTRY METKA METKA# в поле операнда равносильно EXTRN METKA Пример: PROG:: LDA OP1# что равносильно: ENTRY PROG ADC OP2# EXTRN OP1 STA RES# EXTRN OP2 EXTRN RES PROG: LDA OP1 ADC OP2 STA RES При многократном использовании внешней метки постфикс '#' может указываться в любом вхождении или даже в нескольких. 2.6. Директива DBG Директива DBG ON/OFF/REST управляет генерацией специаль- ного файла с отладочной информацией (списком меток) для От- ладчика Debugger. Режим генерации самого файла включается ключом в команд- ной строке автономного Ассемблера или альтернативой меню в ДОК. При этом в отладочный файл (с расширением '.DBG') за- писываются имена всех внешних меток. Данная директива задает область в программе, для которой ВСЕ определенные в ней метки записываются в тот же файл. Смысл переключателей ON/OFF/REST такой же, ка и для дирек- тивы LST. По умолчанию режим выключен. 2.7. Формат REL-файлов Использование FCB.USRINF: 0-1 байты - базовый адрес (ORG или LOC); 2-3 байты - длина кодовой части. Структура данных в файле: кодовая часть (перемещаемая программа) список описателей перемщения (RLD) таблица внешних меток (STB) RLD (ReLocation Dictionary): RLD - последовательность записей длиной 4 байта, которые описывают перемещаемые поля в коде. Перед началом RLD запи- сана ее длина (2 байта). Байт | Значение -----+----------------------------------------------------- 0 | Тэги поля: | бит значение | 7(80) - 1/2 байтовое поле | 6(40) - младший/старший байт (7 бит сброщен) | 5(20) - нормальный/обратный порядок байтов (7 уст.) | 4(10) - не/является внешней ссылкой -----+----------------------------------------------------- 1-2 | Смещение поля относительно начала кода -----+----------------------------------------------------- 4 | Младший байт, если поле короткое и содержит старший; | Ст.4 бита номера метки в STB, если поле - внеш.ссылка | В остальных случаях - 0 -----+----------------------------------------------------- STB (Symbol TaBle): STB - последовательность записей переменной длины, со- держащих информацию об ENTRY/EXTRN метках. Байт | Значение -----+----------------------------------------------------- 0 | Старшие 4 бита - хэш-сумма метки (EOR всех + ASL*4) | Младшие 4 бита - длина метки (N) - 1 -----+----------------------------------------------------- 1-N | Метка (все символы с 7 битом = 1) -----+----------------------------------------------------- N+1 | Тэги метки: 4 бит (10) - EXTRN, 3 бит (08) - ENTRY | Остальные биты в данной версии не используются -----+----------------------------------------------------- N+2-| Для ENTRY - значение. N+3 | Для EXTRN - номер метки, соответствующий номеру в RLD | (младшие 8 битов) -----+----------------------------------------------------- *) В версиях 1.11 и ниже номер внешней метки однобайтовый. Эти версии могут порождать неверную информацию для Ком- поновщика. 2.8. Директива INCLUDE Директива INCLUDE служит для переключения ассемблирова- ния на указанный файл, аналогично директиве CHN, но в отли- чие от последней, по исчерпании этого файла продолжается ассемблирование предыдущего (со строки, следующей за данной директивой). Т.о., данная директива имитирует "вставку" од- ного исходного файла в другой при ассемблировании. Допусти- ма "вложенность" файлов до 5 уровней. Рекомендуется собирать все INCLUDE-включения в одном,не- большом по размеру файле, т.к. по окончании их ассембирова- ния включающий файл все время подгружается (пока). 2.9. FEATURES В версиях, начиная с 1.17, имеется неудачная доработка: при вычислении выражений ведется контроль корректности типа выражения (абсолютное/перемещаемое), которого раньше не бы- ло. Поэтому возможна выдача ошибки 'НЕКОНСТАНТНЫЙ ОПЕРАНД' в сложных выражениях, если некоторое начальное(!) подвыра- жение неконстантно или неперемещаемо (например, R_метка+R_ метка или константа-R_метка и т.п.). Для борьбы с эффектом в случае необходимости пока рекомендуется описывать проме- жуточные константы для подвыражений. В версиях, начиная с 1.17, точки выдаются через 64 стро- ки, а не через 100. Зачем - неясно. 3. ИЗВЕСТНЫЕ ОШИБКИ 1. В программе MAKESYS не перехватывается системный запрос установки диска. Это влечет зависание при попытке сфор- мировать систему в следующих случаях: - в однодисководной конфигурации: при указании другого логического устройства, ассоциированного с тем же физи- ческим, что и текущее - следует обращаться только к те- кущему устройству; - в многодисководной конфигурации: при первом обращении к дисководу, находящемуся на другом разъеме, чем текущее устройство (к парным дисководам на разных приводах одно- го разъема это не относится), например, при формировании системы для другого типа носителя - следует до обращения к MAKESYS произвести холостое обращение к нужному уст- ройству (например, директивой DIR - независимо от резуль- тата).