Не секрет, что у многих, кто читает сейчас этот журнал, есть дисковод. Также не будет секретом, что многих уже стесняют рамки "Бейсика" для работы в системе 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 * * *