Системные переменные TR-DOS 5.04T.
г=====T=====T==================================================¬
¦Адрес¦Длина¦ Содержимое. ¦
¦-----+-----+--------------------------------------------------¦
¦23734¦ 1 ¦Используется, если есть ИНТЕPФЕЙС-1. Если равно ¦
¦ ¦ ¦244, то область переменных не переносится, иначе ¦
¦ ¦ ¦проверяется 23832. ¦
¦23735¦ 11 ¦Не используется. ¦
¦23746¦ 1 ¦Содержит команду RET. Используется для переключе- ¦
¦ ¦ ¦ния ПЗУ на бейсик. ¦
¦23747¦ 5 ¦Не используется. ¦
¦23752¦ 1 ¦Тип дисковода A: ¦
¦ ¦ ¦ бит 7=0 - дисковод 40-дорожечный. ¦
¦ ¦ ¦ 1 - дисковод 80-дорожечный. ¦
¦ ¦ ¦ бит 1=0 - дисковод односторонний. ¦
¦ ¦ ¦ 1 - дисковод двухсторонний. ¦
¦ ¦ ¦ бит 0=0 - использовать 80-дорожечный дисковод как¦
¦ ¦ ¦ 40)дорожечный. ¦
¦23753¦ 1 ¦Тип дисковода B. ¦
¦23754¦ 1 ¦Тип дисковода C. ¦
¦23755¦ 1 ¦Тип дисковода D. ¦
¦23756¦ 1 ¦Текущий сектор при работе с каталогом. ¦
¦23757¦ 1 ¦Если не 0, то после позиционирования будет задерж-¦
¦ ¦ ¦ка. Регистр состояния ВГ-93 перед проверкой дорож-¦
¦ ¦ ¦ки. Бит 7 регистра состояния ВГ-93 перед чтением ¦
¦ ¦ ¦адресного маркера. ¦
¦23758¦ 1 ¦Флаг операции с секторами. При 0 -чтение секторов,¦
¦ ¦ ¦при 255 - запись. ¦
¦23759¦ 2 ¦Адрес рабочей области памяти для MOVE, COPY, LIST.¦
¦ ¦ ¦и при обработке номера записи при выводе в файл ¦
¦ ¦ ¦данных прямого доступа. ¦
¦23761¦ 1 ¦Длина перемещаемого файла для MOVE. ¦
¦23762¦ 1 ¦Имя массива при записи / загрузке массива в виде: ¦
¦ ¦ ¦биты 0 - 4 - имя массива ( от "A"=1 до "Z"=26), ¦
¦ ¦ ¦бит 5 - если 0, то массив числовой, ¦
¦ ¦ ¦бит 6 - если 1, то массив строковый, ¦
¦ ¦ ¦бит 7 - всегда 1. ¦
¦23761¦ 2 ¦Номер строки автостарта при записи программы на ¦
¦ ¦ ¦бейсике. ¦
¦23763¦ 2 ¦Счетчик секторов перемещаемого файла для MOVE. ¦
¦23764¦ 1 ¦Номер стираемого файла для MOVE. ¦
¦23765¦ 1 ¦Текущий сектор перемещаемого файла для MOVE. ¦
¦23766¦ 1 ¦Текущая дорожка перемещаемого файла для MOVE. Ко- ¦
¦ ¦ ¦личество дефектных секторов при форматировании и ¦
¦ ¦ ¦проверке диска. Для подпрограммы сжатия строки: ¦
¦ ¦ ¦если 0, то команда находится в строке программы на¦
¦ ¦ ¦бейсике, иначе в другом месте. Для подпрограммы ¦
¦ ¦ ¦загрузки файла: если 0, то адрес загрузки и длина ¦
¦ ¦ ¦берутся из описателя файла, если 3, то из 23769 и ¦
¦ ¦ ¦23771 соответственно, иначе адрес загрузки берется¦
¦ ¦ ¦из 23769, а длина - из описателя файла. ¦
¦23767¦ 1 ¦Текущий сектор стираемого файла при MOVE. Количес-¦
¦ ¦ ¦тво дорожек при определении типа дисковода и фор- ¦
¦ ¦ ¦матировании. ¦
¦23768¦ 1 ¦Текущая дорожка стираемого файла при MOVE. Если не¦
¦ ¦ ¦0, то форматируемая дорожка не проверяется. ¦
¦23767¦ 2 ¦Сохраняет CH_ADD при обработке номера записи в ¦
¦ ¦ ¦файле последовательного доступа. Адрес переменной ¦
¦ ¦ ¦длины строки для подпрограммы сжатия строки. Адрес¦
¦ ¦ ¦старого массива при загрузке массива. Адрес секто-¦
¦ ¦ ¦ра для PEEK и POKE. ¦
¦23769¦ 1 ¦Относительный адрес записи при обработке номера ¦
¦ ¦ ¦записи в файле последовательного доступа. ¦
¦23770¦ 1 ¦Номер открываемого блока файла произвольного дос- ¦
¦ ¦ ¦тупа при обработке номера записи. Если равно 128, ¦
¦ ¦ ¦, то форматируются две стороны, иначе только одна.¦
¦23769¦ 2 ¦Счетчик освобождающихся секторов для MOVE. Адрес ¦
¦ ¦ ¦загрузки файла для LOAD, номер сектора для PEEK и ¦
¦ ¦ ¦POKE. Адрес ключевого слова для подпрограммы сжа- ¦
¦ ¦ ¦тия строки. Длина файла для записи при SAVE. ¦
¦23771¦ 1 ¦Номер загружаемого сектора блока файла произволь- ¦
¦ ¦ ¦ного доступа при обработке номера записи. Номер ¦
¦ ¦ ¦первого сектора перемещаемого файла для MOVE. ¦
¦23772¦ 1 ¦номер первой дорожки перемещаемого файла для MOVE.¦
¦23771¦ 2 ¦Длина файла для LOAD. Длина файла для указания в ¦
¦ ¦ ¦каталоге при SAVE. Номер потока для CAT и LIST. ¦
¦23773¦ 8 ¦Имя файла или диска при форматировании. ¦
¦23781¦ ¦Расширение файла. ¦
¦23782¦ 2 ¦Адрес загрузки файла. Адрес таблицы секторов для ¦
¦ ¦ ¦форматирования. ¦
¦23784¦ 2 ¦Длина файла. Адрес таблицы секторов для проверки ¦
¦ ¦ ¦дорожки. ¦
¦23786¦ 1 ¦Обьем файла в секторах. ¦
¦23787¦ 1 ¦Номер первого сектора файла. ¦
¦23788¦ 1 ¦Номер первой дорожки файла. ¦
¦23789¦ 2 ¦Адрес загрузки старого файла для COPY. ¦
¦23791¦ 2 ¦Длина старого файла в байтах для COPY. ¦
¦23793¦ 1 ¦Длина старого файла в секторах для COPY. ¦
¦23794¦ 1 ¦Номер первого сектора старого файла для COPY. ¦
¦23795¦ 1 ¦Номер первой дорожки старого файла для COPY. ¦
¦23796¦ 1 ¦Номер текущего сектора для подпрограммы ¦
¦ ¦ ¦загрузки / записи секторов. ¦
¦23797¦ ¦Номер текущей дорожки для подпрограммы ¦
¦ ¦ ¦загрузки / записи секторов. ¦
¦23798¦ 2 ¦Номер дисковода для операции (0 - 3). ¦
¦23800¦ 1 ¦Дисковод-источник для COPY. Если равно 255, то при¦
¦ ¦ ¦выводе в файл данных буфер не удаляется. ¦
¦23801¦ 1 ¦Дисковод-приемник для COPY. Номер дисковода при ¦
¦ ¦ ¦выводе каталога. Признак операции с файлом: 0 - ¦
¦ ¦ ¦- загрузка, 255 - верификация. ¦
¦23802¦ 1 ¦Время перемещения головки дисковода A: (8 - 11). ¦
¦23803¦ 1 ¦То же для дисковода B:. ¦
¦23804¦ 1 ¦То же для дисковода C:. ¦
¦23805¦ 1 ¦То же для дисковода D:. ¦
¦23806¦ 1 ¦Команда контроллера для подпрограммы чтения / за- ¦
¦ ¦ ¦писи сектора. ¦
¦23807¦ 1 ¦Номер сектора для подпрограммы чтения / записи ¦
¦ ¦ ¦сектора. ¦
¦23808¦ 2 ¦Адрес сектора для подпрограммы чтения / записи ¦
¦ ¦ ¦сектора. ¦
¦23810¦ 2 ¦Сохраняет HL для подпрограммы вызова подпрограмм ¦
¦ ¦ ¦из ПЗУ бейсика и 15635. ¦
¦23812¦ 2 ¦Сохраняет DE. ¦
¦23814¦ 1 ¦Число проверяемых байтов описателя файла при его ¦
¦ ¦ ¦поиске. ¦
¦23815¦ 1 ¦Количество стертых файлов для подпрограммы стира- ¦
¦ ¦ ¦ния файлов. ¦
¦23816¦ 1 ¦Первый символ имени файла для подпрограммы стира- ¦
¦ ¦ ¦ния файлов. ¦
¦23817¦ 1 ¦тип файла данных для OPEN# ("R", "W" или "RND"). ¦
¦23819¦ 2 ¦Не используется. ¦
¦23820¦ 1 ¦Флаг наличия буфера: 0 - есть, иначе - нет. ¦
¦23821¦ 1 ¦Номер текущего файла при копировании всего диска с¦
¦ ¦ ¦двумя дисководами. ¦
¦23822¦ 1 ¦Флаг состояния рабочей области памяти. Если равно ¦
¦ ¦ ¦255, то рабочая область использовалась. Если равно¦
¦ ¦ ¦254, то подпрограмма 963 игнорирует ошибки. ¦
¦23823¦ 1 ¦Код ошибки TR-DOS. При поиске файла подпрограммой ¦
¦ ¦ ¦15635: 255 - файл не найден, иначе - номер файла. ¦
¦23824¦ 1 ¦Флаг операции для подпрограммы загрузки / верифи- ¦
¦ ¦ ¦кации файла: 0 - операция с файлом, 255 - загруз- ¦
¦ ¦ ¦ка / верификация сектора файла, иначе - запись ¦
¦ ¦ ¦сектора файла. ¦
¦23825¦ 2 ¦Адрес командной строки. ¦
¦23827¦ 2 ¦Сохраняет содержимое ERR_SP для подпрограмм воз- ¦
¦ ¦ ¦врата в бейсик. ¦
¦23829¦ 1 ¦Если 0, то на экран выводятся сообщения об ошиб- ¦
¦ ¦ ¦ках, иначе не выводятся. ¦
¦23830¦ 1 ¦Копия системного регистра. ¦
¦23831¦ 1 ¦Если равно 170, то при вызове 15612 заставка не ¦
¦ ¦ ¦выводится, иначе выводится заставка и проверяется ¦
¦ ¦ ¦байт по адресу 23296. Если он равен 170, то проис-¦
¦ ¦ ¦ходит запуск файла "boot". ¦
¦23832¦ 1 ¦Используется, если есть ИHТЕPФЕЙС-1. Если не 0, то¦
¦ ¦ ¦меняются местами блоки памяти длиной 45 байтов по ¦
¦ ¦ ¦адресам 23747 и 23859. ¦
¦23833¦ 1 ¦Номер дисковода по умолчанию. ¦
¦23834¦ 2 ¦Адрес возврата из подпрограммы завеpшения. ¦
¦23836¦ 2 ¦Сохраняет SP для подпрограмм возвpата в бейсик. ¦
¦23838¦ 1 ¦Номер файла при его поиске. ¦
¦23839¦ 1 ¦Флаг способа вызова TR-DOS. Если 0, то вызов был ¦
¦ ¦ ¦из машинного кода, иначе - из бейсика. Первый сек-¦
¦ ¦ ¦тор файла на диске - приемнике для COPY S. ¦
¦23840¦ 1 ¦Первый сектор файла на диске-приемнике для COPY S.¦
¦23840¦ 3 ¦Сохраняет 3 первых символа командной строки. ¦
¦23841¦ 1 ¦Если не 0, то идет первый проход копирования, ина-¦
¦ ¦ ¦че продолжение. ¦
¦23843¦ 1 ¦Размер доступной памяти в секторах для MOVE и ¦
¦ ¦ ¦COPY. ¦
L=====¦=====¦==================================================-
При инициализации системы используются еще и следующие ячейки:
г=====T=====T==================================================¬
¦Адрес¦Длина¦ Содержимое. ¦
¦-----+-----+--------------------------------------------------¦
¦23746¦ 1 ¦Команда RET. Используется для вызова подпрограмм ¦
¦ ¦ ¦из ПЗУ бейсика. ¦
¦24320¦ 2 ¦Сохраняет HL для подпрограммы выполнения команды ¦
¦ ¦ ¦процессора в ОЗУ. ¦
¦24322¦ 14 ¦Не используется. ¦
¦24336¦ 3 ¦Подпрограмма перемещения блоков памяти LDIR или ¦
¦ ¦ ¦LDDR. ¦
¦24339¦ 237 ¦Временный стек. ¦
L=====¦=====¦==================================================-
Также при инициализации системных переменных TR-DOS 20 байтов с
адреса 23698 используются для размещения подпрограммы проверки
наличия ИHТЕPФЕЙСа-1.
Способы обращения к ПЗУ TR-DOS.
ПЗУ TR-DOS является теневым, поэтому к нему нельзя обратиться
непосредственно при помощи CALL. Но для того, чтобы оно было
доступно для использования, существуют адреса, при переходе на
которые включается ПЗУ TR-DOS. В ПЗУ бейсика-48 в этих адресах
находится знакогенератор, следовательно обычно управление туда
никогда не передается. Внимание!!! В ПЗУ бейсика-128 в этих ад-
ресах находится программа, поэтому при включенном ПЗУ бейси-
ка-128 ПЗУ TR-DOS блокируется полностью. Ниже вы видите список
точек входа, переключающих ПЗУ.
15616 - вход в командный процессор TR-DOS.
15619 - выполнение команд TR-DOS из бейсика.
15622 - подпрограмма ввода из файла данных.
15629 - подпрограмма вывода в файл данных.
15632 - подпрограмма изменения памяти.
15635 - вызов подпрограмм TR-DOS из машинного кода.
15638 - подпрограмма обработки ошибок, поступающих из ПЗУ бейси-
ка.
15663 - переход на любой адрес в ПЗУ TR-DOS.
Как пользоваться этими точками входа.
15616 - простой вызов. Можно установить переменные 23831 и
23296.
15619 - из бейсика:
RANDOMIZE USR 15619:REM:<команда>
из машинного кода:
1) разместить в памяти командную строку в ASCII виде с
префиксом REM:.
2) поместить в CH_ADD адрес этой строки.
3) CALL 15619.
Hапример:
LD HL,LINE ;установка CH_ADD
LD (23645),HL
JP 15619 ;выполнение команды
;командная строка
LINE DEFB 234 ;REM
DEFB ":" ;:
DEFB 239 ;HOAD
DEFB 34 ;"
DEFM "EXAMPLE";EXAMPLE
DEFB 34 ;"
DEFB 13 ;ENTER
15622 - открыть канал файла данных и вызвать. На выходе символ
из файла будет в аккумуляторе.
15629 - открыть канал файла данных, поместить в A символ и выз-
вать. Внимание!!! Содержит ошибку.
15632 - просто вызвать. Проверяет 23734 и 23832 и меняет блоки
памяти местами, если нужно.
15635 - Номер подпрограммы поместите в регистр C, остальное сог-
ласно таблице:
г=======T======================================================¬
¦Команда¦ Функции ¦
¦-------+------------------------------------------------------¦
¦ 0 ¦Восстановление с ожиданием INTRQ. Воспринимает BREAK. ¦
¦ 1 ¦Выбор дисковода. Номер дисковода поместите в регистр ¦
¦ ¦A. Если в переменной с временем перемещения головки ¦
¦ ¦дисковода бит 7 включен, то определяется времЯ пеpеме-¦
¦ ¦щения головки и проверяется переменная с типом диско- ¦
¦ ¦вода. Если она не равна 255 (ошибка), то будет опреде-¦
¦ ¦лено количество дорожек дисковода. При этом предпола- ¦
¦ ¦гается, что дисковод односторонний (ошибка). Пpи воз- ¦
¦ ¦врате определяется номеp дорожки, на которой стоит го-¦
¦ ¦ловка дисковода и заносится в регистр дорожки. ¦
¦ 2 ¦Позиционирование. Логический ноль дорожки поместите в¦
¦ ¦A. Если по адресу 23757 не 0, то после позиционирова- ¦
¦ ¦ния будет задержка. В программе есть ошибка. ¦
¦ 3 ¦Помещает содержимое аккумулятора по адресу 23807. ¦
¦ 4 ¦Помещает содержимое HL по адресу 23808. ¦
¦ 5 ¦Чтение группы секторов. В HL поместите адрес в памяти,¦
¦ ¦в D - номер первой дорожки, в E - номер первого секто-¦
¦ ¦ра, в B - количество секторов. В программе есть ошиб- ¦
¦ ¦ка. ¦
¦ 6 ¦Запись группы секторов. Параметры и ошибка аналогично ¦
¦ ¦команде 5. ¦
¦ 7 ¦Вывод каталога. В аккумулятор поместите номер потока, ¦
¦ ¦а в 23801 поместите номер дисковода из 23798. В прог- ¦
¦ ¦рамме есть ошибка. ¦
¦ 8 ¦Чтение описателя файла по адресу 23773. Номер файла ¦
¦ ¦поместите в аккумулятор. ¦
¦ 9 ¦Запись описателя файла. Описатель разместите по адре- ¦
¦ ¦су 23773 и поместите номер файла в аккумулятор. ¦
¦ 10 ¦Поиск файла. Проверяемую часть описателя разместите с ¦
¦ ¦адреса 23773, а ее длину поместите в 23814. Если файл ¦
¦ ¦найден, то в BC, 23823 и 23838 будет его номер, иначе ¦
¦ ¦23838 не меняется, а в 23823 и BC будет 255. ¦
¦ 11 ¦Запись файла. Имя и расширение поместите с 23773, на- ¦
¦ ¦чало в памяти поместите в HL, а длину - в DE. ¦
¦ 12 ¦Запись программы на бейсике. Имя и расширение помести-¦
¦ ¦те с адреса 23773. Если расширение не "B", то файл за-¦
¦ ¦писывается как кодовый. ¦
¦ 13 ¦Не используется. ¦
¦ 14 ¦Выполняет 5 функций: ¦
¦ ¦ Загрузка файла: в 23801 и 23824 поместите 0, имя и ¦
¦ ¦ расширение поместите с 23773, а также: ¦
¦ ¦ Для бейсик - программ - больше ничего. ¦
¦ ¦ Для файлов CODE : ¦
¦ ¦ Пpи A=0 - адрес загрузки и длина берутся из катало-¦
¦ ¦ га. ¦
¦ ¦ При A=3 - адрес загрузки берется из HL, длина - из ¦
¦ ¦ DE. ¦
¦ ¦ Иначе - адрес загрузки берется из HL, длина - из ¦
¦ ¦ каталога. ¦
¦ ¦ Для массивов - A<>0, в HL - длина тела старого мас- ¦
¦ ¦ сива или 0, если такового нет; в 23767 - адрес тела ¦
¦ ¦ старого массива в памяти, в 23762 - имя массива. ¦
¦ ¦ Верификация файла - все как и для загрузки, только в ¦
¦ ¦ 23801 поместите 255. ¦
¦ ¦ Загрузка сектора файла - в 23801 поместите 0, в ¦
¦ ¦ 23824 - 255, в 23767 - адрес загрузки, в HL - номер ¦
¦ ¦ сектора, в A - 3, в DE - 0 (два последних действия - ¦
¦ ¦ для обхода ошибки. Внимание!!! Не работает с файлами ¦
¦ ¦ BASIC и DATA из-за ошибки. ¦
¦ ¦ Верификация сектора файла - все как и при загрузке, ¦
¦ ¦ только в 23801 поместите 255. ¦
¦ ¦ Запись сектора файла - в 23801 поместите 255 (для об-¦
¦ ¦ хода ошибки), в 23824 - не 0 и не 255, в A - не 0, в ¦
¦ ¦ HL - номер сектора, в 23767 - адрес в памяти. ¦
¦15 - 17¦Не используется. ¦
¦ 18 ¦Стирание файлов. Имя и расширение поместите с 23773, ¦
¦ ¦можно обнулить 23815, тогда по окончании там будет ¦
¦ ¦число стертых файлов. ¦
¦ 19 ¦Перенос 16 байтов с адреса в HL по адресу 23873. ¦
¦ 20 ¦Обратное 19. ¦
¦ 21 ¦Проверка дорожки. Физический номер дорожки поместите в¦
¦ ¦аккумулятор и выберите сторону диска. Если обнаружены ¦
¦ ¦плохие сектора, то в 23823 и BC будет 7, а в 23766 бу-¦
¦ ¦дет их количество. ¦
¦ 22 ¦Выбирает верхнюю сторону диска. ¦
¦ 23 ¦Выбирает нижнюю сторону диска. ¦
¦ 24 ¦Проверяет принадлежность диска и настраивает систему ¦
¦ ¦на его тип. Содержит ошибку. ¦
L=======¦======================================================-
15638 - внутренняя точка входа. Как использовать, смотрите в ди-
зассемблере.
15663 - поместите на стек нужный адрес, затем JP 15663. В качес-
тве примера привожу подпрограммы выполнения двух команд
TR-DOS, отсутствующих в 15635.
Форматирование диска. Имя диска поместите в 23773.
CAHL 15632 ;изменение памяти
LD A,255 ;эта часть программы повторяет 15635
LD (23829),A ;сообщения не печатать
LD (23839),A ;работает машинный код
LD (23768),A ;дорожки не проверять
LD (23761),A ;NO DISC при чтении адресного маркера игнорировать
LD HL,513 ;после завершения возврат будет в бейсик
LD (23834),HL
LD (23836),SP;сохранение SP
PUSH AF ;выделение места для адреса подпрограммы обработки ошибок
LD HL,7901 ;адрес подпрограммы форматирования
PUSH HL ;помещение его на стек
LD HL,541 ;адрес подпрограммы установки адреса обработки ошибок
PUSH HL ;помещение его на стек
JP 15663 ;вход в ПЗУ TR-DOS
Упаковка пространства диска.
CALL 15632 ;снова повторяем 15635
LD A,255
LD (23829),A
LD (23839),A
LD HL,513
LD (23834),HL
LD (23836),SP
PUSH AF
LD HL,5806 ;адрес подпрограммы упаковки пространства диска
PUSH HL ;помещение его на стек
LD HL,541 ;дальше как в предыдущем примере
PUSH HL
JP 15663