Системные переменные TR-DOS 5.04T.
╔═════╤═══╤══════════════════════════════════════════════════╗
║Адрес│Дл.│ Содержимое. ║
╟─────┼───┼──────────────────────────────────────────────────╢
║23734│ 1 │Используется, если есть ИНТЕРФЕЙС-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│ 1 │Расширение файла. ║
║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│ 1 │Номер текущей дорожки для подпрограммы ║
║ │ │загрузки / записи секторов. ║
║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 │Используется, если есть ИНТЕРФЕЙС-1. Если не 0, то║
║ │ │меняются местами блоки памяти длиной 45 байтов по ║
║ │ │адресам 23747 и 23859. ║
║23833│ 1 │Номер дисковода по умолчанию. ║
║23834│ 2 │Адрес возврата из подпрограммы завершения. ║
║23836│ 2 │Сохраняет SP для подпрограмм возврата в бейсик. ║
║23838│ 1 │Номер файла при его поиске. ║
║23839│ 1 │Флаг способа вызова TR-DOS. Если 0, то вызов был ║
║ │ │из машинного кода, иначе - из бейсика. Первый сек-║
║ │ │тор файла на диске - приемнике для COPY S. ║
║23840│ 1 │Первый сектор файла на диске-приемнике для COPY S.║
║23840│ 3 │Сохраняет 3 первых символа командной строки. ║
║23841│ 1 │Если не 0, то идет первый проход копирования, ина-║
║ │ │че продолжение. ║
║23843│ 1 │Размер доступной памяти в секторах для MOVE и ║
║ │ │COPY. ║
╚═════╧═══╧══════════════════════════════════════════════════╝
При инициализации системы используются следующие ячейки:
╔═════╤═══╤══════════════════════════════════════════════════╗
║Адрес│Дл.│ Содержимое. ║
╟─────┼───┼──────────────────────────────────────────────────╢
║23746│ 1 │Команда RET. Используется для вызова подпрограмм ║
║ │ │из ПЗУ бейсика. ║
║24320│ 2 │Сохраняет HL для подпрограммы выполнения команды ║
║ │ │процессора в ОЗУ. ║
║24322│ 14│Не используется. ║
║24336│ 3 │Подпрограмма перемещения блоков памяти LDIR или ║
║ │ │LDDR. ║
║24339│237│Временный стек. ║
╚═════╧═══╧══════════════════════════════════════════════════╝
Также при инициализации системных переменных TR-DOS 20 бай-
тов с адреса 23698 используются для размещения подпрограммы
проверки наличия ИНТЕРФЕЙСа-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.
Например:
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, остальное
согласно таблице:
╔═════╤══════════════════════════════════════════════════════╗
║ Ком.│ Функции ║
╟─────┼──────────────────────────────────────────────────────╢
║ 0 │Восстановление с ожиданием INTRQ. Воспринимает BREAK. ║
║ 1 │Выбор дисковода. Номер дисковода поместите в регистр ║
║ │A. Если в переменной с временем перемещения головки ║
║ │дисковода бит 7 включен, то определяется времЯ nepeme-║
║ │щения головки и проверяется переменная с типом диско- ║
║ │вода. Если она не равна 255 (ошибка), то будет опреде-║
║ │лено количество дорожек дисковода. При этом предпола- ║
║ │гается, что дисковод односторонний (ошибка). При воз- ║
║ │врате определяется номер дорожки, на которой стоит го-║
║ │ловка дисковода и заносится в регистр дорожки. ║
║ 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 : ║
║ │ При 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 │Проверяет принадлежность диска и настраивает систему ║
║ │на его тип. Содержит ошибку. ║
╚═════╧══════════════════════════════════════════════════════╝
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
Other articles: