|
Welcome Press
#01
31 декабря 1995 |
|
Справочник программиста - точки входа в TR-DOS.

Не секрет, что у многих, кто читает сейчас
этот журнал, есть дисковод. Также не будет
секретом, что многих уже стесняют рамки "Бейсика"
для работы в системе TR-DOS. Конечно у многих
есть книга А.Ларченко и Н.Родионова" ZX SPECTRUM
& TR-DOS". Данная статья предназначена для тех у
кого не было возможности познакомиться с этой
замечательной книгой.
Итак, перед тем как рассмотреть точки входа в
TR-DOS, давайте кое-что разберём (не в физическом
смысле). Не секрет, что ПЗУ занимает область
памяти начиная с 0 и заканчивая адресом 16384,
дальше простирается ОЗУ. Ну, а где же TR-DOS? Всё
дело в том, что при разработке TR-DOS
разработчики этой системы стремились к
максимальной совместимости с другими видами этой
машины не имеющими TR-DOS, поэтому пришлось
придумать остроумный способ, называемый теневой
памятью.
Для самых любопытных скажу, что увидеть
TR-DOS можно! Для этого войдите в систему и
наберите SAVE "TR-DOS" CODE 0,16384.
Дизассемблировав этот фаил, Вы сможете глубже
понять и разобраться в этой системе.
При нормальной работе Z80 (центрального
микропроцессора) TR-DOS в памяти отсутствует, но
если вызвать точку входа 15616 или 15619, то
TR-DOS занимает место где обычно находится ПЗУ и
берёт управление на себя. При возврате, если
адрес возврата больше 16384, управление снова
переходит к ПЗУ "Бейсика".
Ну, ладно, начнём рассказ о точках.
Первые две точки всем известны - это 15616 и
15619. О них говорить особо не буду.
Следующая точка 15649 является подготовитель-
ным этапом перед обращением к другим точкам.
Ее назначение - это установка системы TR-DOS
и ее инициализация .
Точка 15635 является наиболее важной точкой
входа, она позволяет обратиться напрямую к
интерпритатору команд TR-DOS. При обращении,
номер команды задается в регистре C.
Рассмотрим команды интерпритатора:
#00 - эта команда позволяет установить блок
магнитных головок дисковода на нулевую дорожку и
сбросить "сердце" микроконтроллера КР 1818ВГ93.
Эту команду лучше всего применять в самом начале
работы с точкой 15635.
#01 - это команда настройки на дисковод.
Служит для записи параметров дисковода
(количество дорожек и скорость перемещения
магнитных головок) в системмные переменные
TR-DOS. Эту команду можно не выполнять, если
вручную занести все характеристики по адресу
23752 (количество дорожек) и 23802 (скорость
перемещения). Номер дисковода в аккумуляторе.
Пример:
LD A,#00
LD C,#01 ;Настройка на дисковод А
CALL 15635
#02 - это позиционирование. Служит для
перемещения блока магнитных головок на заданную
дорожку. Номер сектора в аккумуляторе.
Пример:
LD A,#05
LD C,#02 ;Перемещение магнитных
CALL 15635 головок на пятую дорожку.
#03 - это команда установки номера сектора в
аккумуляторе.
Пример:
LD A,#03
LD C,#03 ;Выбор 3-го сектора
CALL 15635
#04 - установка адреса пользовательского
буфера. Смотри #05 и #06.
Пример:
LD HL,Адрес буфера
LD C,#04
CALL 15635
#05 - чтение группы секторов. Команда
считывает в память с диска сектора, начиная с
сектора заданного в регистре Е, расположенного на
дорожке заданной в регистре D, в память начиная с
адреса заданного в регистре HL.
Пример:
LD BC,#0805
LD DE,#0000 ; Считывание каталога
LD HL,50000 ; диска в память, начиная
CALL 15635 ; с адреса 50000
#06 - запись группы секторов. Команда
записывает информацию из области памяти, заданной
в регистре HL, на дорожку, заданную в регистре D,
в сектор, заданный в регистре E. Количество целых
секторов задается в регистре B.
Пример:
LD BC,#0106
LD DE,#08 ; Запись в служебный сектор
; информации из памяти
LD HL,50000 ; начиная с адреса 50000
CALL 15635
#07 - вывод каталога диска. В аккумулятор
помещается номер потока куда будет выведен
каталог (#2-экран; #3-принтер). Номер дисковода
задается по адресам 23798, 23800, 23801.
Пример:
LD A,#0
LD (23798),A
LD (23800),A ; Выбор дисковода А.
LD (23801),A
LD A,#2 ; Выбираем вывод на экран.
LD C,#7
CALL 15635 ; Печать католога на экране.
#08 - считывание элемента каталога. Номер
элемента задается в аккумуляторе. Эта команда
позволяет считывать элемент каталога в дескриптор
файла, расположенный по адресу с 23773 по 23788.
Разберем по отдельности дескриптор файла:
В адресах с 23773 по 23780 находиться имя
файла. В адресе 23781 тип файла
(C-CODE; B-BASIK; D-DATA и т.д). 23782-23783 при
типе <C>-стартовый адрес; при типе <B>-длина
бейсик программы. 23784-23785 длина файла.
23786-объем файла в секторах. 23787-номер первого
сектора файла. 23788-номер первой дорожки файла.
Пример:
LD A,#02
LD C,#08 ;Считывание информации о третьем
CALL 15635 ;файле в дескриптор.
#09 - запись дескриптора файла. С помощью
этой команды, дескриптор файла записывается в
элемент каталога заданный в аккумуляторе.
Пример:
LD A,#02
LD C,#09 ;Запись дескриптора файла на место
CALL 15635 ;3-го элемента каталога.
#0A - поиск информации о файле. Эта команда
используется для поиска в каталоге информации о
фаиле. Исходная информация задается в
дескрипторе. Количество байтов (шаблон) по
которым ведется поиск задаются по адресу 23814.
Там обычно записано число 9.
#0B - функция создания файла. Имя и тип файла
в дескрипторе, адрес в HL, длина в DE.
#0C - создание бейсик файла. Эта команда
аналогична предыдущей, только тип записываемой
программы должен быть обязательно <B>. Входной
параметр в дескрипторе.
#0E - команда чтения/проверки. Входные
параметры должны быть помещены в дескриптор. По
адресу 23801-вид операции #00-чтение;
#FF-проверка. Для "не-BASIC" файлов адрес в HL
длина в DE, в аккумуляторе число не равное 0 или
3.
#0F; #10; #11; #16 - отсутствие действия.
#12 - удаление файла. Эта команда ищет
элемент каталога, совпадающий с дескриптором и
удаляет его.
#13 - эта команда копирует из памяти, адрес в
HL, 16 байтов в дескриптор файла.
#14 - эта команда работает наоборот, чем
предыдущая. Копируется дескриптор в память,
адресуемый регистром HL.
#15 - тестирование дорожки. Номер дорожки в
регистре D, номер стороны см. #17 или #02.
В адресе 23766 счетчик сбойных секторов.
#17 - выбор нижней стороны диска.
Пример:
LD C,#17
CALL 15635
#18 - настройка на диск. Эта команда
считывает с диска служебный сектор и производит
настройку некоторых переменных TR-DOS. Необходима
при смене диска.
Для тех у кого нет кнопки "MAGIC". Данная
программа для этой кнопки находится по адресу
102. Попасть в нее можно через точку по адресу
15664, где находится команда RET.
Пример:
LD HL,адрес возврата
PUSH HL
LD HL,#102
PUSH HL
JP 15664
И напоследок хочу привести назначение
некоторых регистров.
HL - этот регистр в основном используется как
адресный регистр.
DE - этот регистр используется в командах,
где помимо основного адреса, нужен ещё один
адрес.
Пример:
LD HL,основной адрес
LD DE,вспомогательный адрес
LD BC,количество пересылаемых байт
LDIR
BC - счётный регистр. В основном применяется
как счётчик циклов, да и просто как счётчик.
A - универсальный накопительный регистр. В
самых первых моделях компьютеров был только один
этот регистр. Основное применение находит при
операциях сравнения и как 8-ми разрядный счетчик.
Ну вот, наверное, и всё. Если найдете упущения,
просьба сильно не ругать. Старался как мог.
И.Майоров, 1996
* * *
Другие статьи номера:
Похожие статьи:
Мозаика - Опубликование результатов опроса откладывается ..
В игре "The Last Battle" встроен вирус !
В этот день... 13 ноября