Полное описание и дизассемблер ПЗУ TR-DOS 5.04T (5.03) 1995 г.

Глава 2 - системные переменные TR-DOS 5.04T. Форматирование диска. Упаковка пространства диска.


             Системные переменные 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




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Docs - текстовый редактор AcEditor превратился в набор "Сделай Сам".
Пати - отчет с Сrazy Siberian Party 2002.
Почтовый ящик - Письма читателей
Sofтинка - описание нового текстового редактора ZX-WinWord V3.0 (Oberon Creative Pack).
Реклама - Реклама и объявления.

В этот день...   18 апреля