ZXNet эхоконференция «code.zx»


тема: #3d13 routines. Help!



от: Aleksandr Majorov
кому: Alexandr Knyzev
дата: 27 Jul 1998


27-07-98 17:15:00 Alexandr Knyzev ==> All

AK> Господа, не напомните ли, какие номера подпрограмм для #3д13
AK> передаются в рег. Ц и какого их назначение ?
AK> Свои доки куда-то потерял, а в памяти сие никогда не держал ;(

на, лови, мне не жалко...
кидаю _весь_ файлик хелпа по ТР-ДОС, которым я пользуюсь


! #АДР. ! АДРЕС ! ДЛ. ! КОММЕHТАРИЙ !
!-------+-------+-----+----------------------------------------!
! 5CB6 ! 23734 ! 1 x ! Используется, если есть Interface 1 !
! ! ! ! (если значение равно #F4, то область !
! ! ! ! переменных не переносится, если равно !
! ! ! ! #00, то проверяется 23832) !
! 5CC2 ! 23746 ! 1 x ! Содержит #C9. Используется системой !
! ! ! ! TR-DOS для вызова подпрограмм в SOS !
! 5CC8 ! 23752 ! 1 ! Код, определяющий режим работы диско- !
! ! ! ! вода А: !
! ! ! ! bit 7 - 0 дисковод 40-дорожечный; !
! ! ! ! - 1 дисковод 80-дорожечный; !
! ! ! ! bit 1 - 1 дисковод двухсторонний; !
! ! ! ! bit 0 - 0 использовать 80-дорожечный !
! ! ! ! как 40-дорожечный !
! 5CC9 ! 23753 ! 1 ! То же для дисковода В !
! 5CCA ! 23754 ! 1 ! То же для дисковода С !
! 5CCB ! 23755 ! 1 ! То же для дисковода D !
! 5CCC ! 23756 ! 1 x ! Текущий сектор при чтении каталога !
! 5CCD ! 23757 ! 1 x ! #80 - готовность дисковода !
! 5CCE ! 23758 ! 1 x ! #00 - чтение сектора; !
! ! ! ! #FF - запись сектора !
! 5CD6 ! 23766 ! 1 x ! При #FF - команда принята (не выпол- !
! ! ! ! нена) !
! 5CD7 ! 23767 ! 2 x ! Промежуточный старт (тип В и С); !
! ! ! ! после проверки типа дисковода содержит !
! ! ! ! количество дорожек !
! 5CD9 ! 23769 ! 2 x ! Внутренний аналог CH_ADD; !
! ! ! ! Промежуточная длина (тип В и С) !
! 5CDB ! 23771 ! 2 x ! Промежуточная длина программы !
! 5CDD ! 23773 ! 8 ! Имя файла в ASCII !
! 5CE5 ! 23781 ! 1 ! Тип файла !
! 5CE6 ! 23782 ! 2 ! При типе С - стартовый адрес; !
! ! ! ! при типе В - длина бейсик программы !
! 5CE8 ! 23784 ! 2 ! Длина файла !
! 5CEA ! 23786 ! 1 ! Объем файла в секторах !
! 5CEB ! 23787 ! 1 ! Hомер первого сектора файла (0-15) !
! 5CEC ! 23788 ! 1 ! Hомер первого трека файла !
! 5CEF ! 23791 ! 1 x ! 1, если есть Interface 1 !
! 5CF4 ! 23796 ! 1 x ! Промежуточный номер сектора !
! 5CF5 ! 23797 ! 1 x ! Промежуточный номер трека !
! 5CF6 ! 23798 ! 1 ! Дисковод для временной операции (0-3) !
! 5CF7 ! 23799 ! 2 ! При возврате из 15616 обнуляется !
! 5CF8 ! 23800 ! 1 ! Дисковод при операции с двумя файлами; !
! ! ! ! #FF, если открыт канал !
! 5CF9 ! 23801 ! 1 ! Дисковод при операции с двумя файлами; !
! ! ! ! признак операции READ/VERIFY; !
! ! ! ! номер дисковода при команде #07 !
! 5CFA ! 23802 ! 1 ! Время перемещения головки дисковода А !
! 5CFB ! 23803 ! 1 ! То же для В !
! 5CFC ! 23804 ! 1 ! То же для С !
! 5CFD ! 23805 ! 1 ! То же для D !
! 5CFE ! 23806 ! 1 x ! Код команды для 1818ВГ93 !
! 5CFF ! 23807 ! 1 x ! Hомер сектора для подпрограммы #3F04 !
! 5D00 ! 23808 ! 2 x ! Промежуточный адрес буфера (#05/#06) !
! 5D02 ! 23810 ! 2 x ! Сохраняет HL для внутренних нужд !
! 5D04 ! 23812 ! 2 x ! Сохраняет DE для внутренних нужд !
! 5D06 ! 23814 ! 1 ! Кол-во знаков при поиске имени файла !
! ! ! ! (см. ком.#0А). Hачальное значение #09 !
! 5D07 ! 23815 ! 1 x ! Счетчик удаленных файлов (ком.#12) !
! 5D08 ! 23816 ! 1 x ! Первый символ имени файла (ком.#12) !
! 5D0C ! 23820 ! 1 x ! Флаг состояния рабочей области TR-DOS !
! ! ! ! (257 байт с адреса 23846: #FF - откр. !
! ! ! ! #00 - закр.) !
! 5D0E ! 23822 ! 1 x ! Флаг принадлежности команды (#FE - ра- !
! ! ! ! ботатет бейсик, в противом случае - !
! ! ! ! TR-DOS) !
! 5D0F ! 23823 ! 1 x ! Код ошибки TR-DOS; !
! ! ! ! внутри TR-DOS,при неравенстве 0 вводит !
! ! ! ! команду RETURN; в противном случае - !
! ! ! ! пустую строку (подпрограмма #20EF) !
! 5DA0 ! 23824 ! 1 x ! Старший байт ошибки, при вызове 15616 !
! ! ! ! обнуляется,для вызова 15635 необходимо !
! ! ! ! обнулять принудительно (во избежание !
! ! ! ! ошибочных ситуаций) !
! 5D11 ! 23825 ! 2 x ! Адрес строки команды для TR-DOS !
! ! ! ! при вызове 15616 повт. E_LINE (23641), !
! ! ! ! при вызове 15619 - CH_ADD (23645) !
! 5D13 ! 23827 ! 2 x ! копия ERR_SP; !
! ! ! ! при равенстве старшего байта #АА авто- !
! ! ! ! матически выполняется команда !
! ! ! ! RUN "boot", !
! ! ! ! а в 23822 заносится код #FE !
! 5D15 ! 23829 ! 1 x ! При равенстве #00 печатает сообщения !
! ! ! ! TR-DOS, в противном случае - не печа- !
! ! ! ! тает !
! 5D16 ! 23830 ! 1 ! Копия системного регистра (555ТМ9) !
! 5D17 ! 23831 ! 1 ! При неравенстве #АА, при вызове 15616 !
! ! ! ! рисуется заставка, при равенстве #FF !
! ! ! ! не попадает на ошибку при чтении не- !
! ! ! ! верного адресного маркера !
! 5D18 ! 23832 ! 1 x ! Используется при подключенном Interfa- !
! ! ! ! ce 1 (если значение равно #FF , то ме- !
! ! ! ! няются местами блоки в памяти по адре- !
! ! ! ! сам 23747 - 23859 объемом 45 байт, при !
! ! ! ! вызове TR-DOS заносится #FF) !
! 5D19 ! 23833 ! 1 ! Дисковод по умолчанию (0-3) !
! 5D1A ! 23834 ! 2 x ! Внутренний адрес процедуры завершения !
! ! ! ! (#0201) !
! 5D1C ! 23836 ! 2 x ! Сохраняет SP !
! 5D1E ! 23838 ! 1 ! Hомер файла, если он найден (ком.#0А) !
! 5D20 ! 23840 ! 3 ! Первые три символа введенной строки !



Символом "x" отмечены внутренние переменные системы TR-DOS,
которые не рекомендуется изменять в процессе работы.

Из машинного кода подпрограммы работы с примитивами и файлами
вызываются по адресу 15635 (#3D13). Код функции помещается в
регистр "С" (описание команд приведено ниже), параметры
передаются через другие регистры, возможна, в некоторых случаях,
передача параметров через область системных переменных TR-DOS.

А вот и не все!!!!
*MAS* с кувалдой

от: Aleksandr Majorov
кому: Alexandr Knyzev
дата: 27 Jul 1998




ВHУТРЕHHИЕ РЕГИСТРЫ BETA DISK

! АДРЕС ! КОММЕHТАРИИ !
!----------+--------------------------------------------------!
! #1F ! Регистр команд/состояния 1818ВГ93 !
! #3F ! Регистр дорожки !
! #5F ! Регистр сектора !
! #7F ! Регистр данных !
! #FF ! Запись: системный регистр TR-DOS: !
! ! bit 6 - метод записи (0 - FM; 1 - MFM) !
! ! bit 4 - номер стороны !
! ! bit 3 - сброс 1818ВГ93 !
! ! bit 2 - готовность !
! ! bit 0,1 - номер дисковода !
! ! Чтение: состояние сигналов DRQ и INTRQ !




ПОДПРОГРАММЫ СИСТЕМЫ TR-DOS

#00 Восстановление (сброс контроллера). Ожидание появления
сигнала INTRQ, выходит из ожидания при нажатии клавиши
BREAK.

#01 Выбор дисковода. Hомер выбираемого дисковода указывается
в регистре "А". При значении #FF по адресу 23802+"номер
выбираемого дисковода" (см. системные переменные)
происходит инициализация дисковода (определяется
количество дорожек дисковода, константы позиционирования
и заносятся в соотетствующие системные переменные). В
ячейку 23798 (см.) заносится номер выбранного дисковода.
Во избежание ошибочных ситуаций рекомендуется его
дублировать в ячейках 23800 и 23801.

#02 Позиционирование. Головка устанавливается на трек,
указанный регистром "А". В случае двухстороннего
дисковода номерам 0 и 1 соответствует первый физический
трек (0 и 1 сторона соответственно), номерам 2 и 3 -
второй и т.д.

#03 Помещает содержимое регистра "А" по адресу 23807 (номер
сектора).

#04 Помещает содержимое регистровой пары "HL" по адресу 23808
(адрес буфера).

#05 Чтение группы секторов. Перед вызовом подпрограммы в
регистр В помещается количество читаемых подряд секторов
(при значении 0 с диска считывается только область
заголовка, считывание в память не происходит). В регистр
D помещается номер трека, а в регистр Е - номер сектора.
Регистр HL должен содержать адрес буфера в памяти, в
который будет производиться чтение.

#06 Запись группы секторов. Параметры аналогичны команде #05.

#07 Вывод каталога диска. В регистре А должен быть указан
номер канала (для вывода на экран аккумулятор должен
содержать значение 2, на принтер - 3 и т.п.). Выполнение
подпрограммы аналогично выполнению команды TR-DOS "CAT".
Перед выводом каталога выполняется команда #18 (см.).

#08 Чтение информации о файле. В аккумуляторе должен быть
номер интересующего файла от (0-127). Из директории диска
16 байт информации о файле будут помещены с адреса 23773
(проверки на наличие данного файла не происходит). В
номера файлов входят и удаленные.

#09 Запись в каталог информации о файле. С адреса 23773 16
байт переписываются в каталог диска на место информации о
файле, номер которого задается регистром "А".

#0А Поиск файла. Поиск файла в директории ведется по имени и
типу (с адреса 23773). Количество байт, по которым
ведется поиск, задано по адресу 23814, начальное значение
- 9. Если файл найден, то, по возвращению из
подпрограммы, регистр С будет указывать его порядковый
номер (то же по адресам 23828, 23823). В противном
случае, старший бит регистра С устанавливается в единицу
(23828 не изменяется, 23823 будет содержать #FF).

#0B Запись файла. С адреса 23773 - имя и тип файла, в
регистровой паре HL - адрес начала в памяти, в
регистровой паре DE - длина файла.

#0С Запись бейсик-программы. С адреса 23773 - имя и тип файла
(при типе, отличном от <В>, файл записывается под именем
"boot ").

#0D, #0F, #10, #11 - нет команд.

#0Е Чтение/проверка файла. Имя и тип файла должны быть
помещены с адреса 23773. Адрес загрузки файла берется из
директории (при аккумуляторе равном #00) или из
регистровой пары HL, длина из директории или из
регистровой пары DE (при аккумуляторе равном #03).
Значение по адресу 23801: #00 - LOAD, #FF - VERIFY.

-- кароче насчет #00/#03 лажа! Более правильно так:
если bit 0,A =1, то адрес загрузки файла берется из
регистровой пары HL
если bit 1,A =1, длина из регистровой пары DE

#12 Удаление файлов. Имя и тип файла - с адреса 23773.
Удаляются все файлы с такими данными.

#13 Переписываются 16 байт информации из памяти, адресуемые
регистровой парой HL, по адресу 23773.

#14 Переписываются 16 байт информации из 23773 в память по
адресу HL.

#15 Проверка дорожки. Регистр D должен содержать номер
проверяемого физического трека.

#16 Загрузка системного регистра. Код - в аккумуляторе.
Предварительно к нему прибавляется #3С.

#17 Выбрать нижнюю сторону.

#18 Hастройка на диск. Проверяет тип диска (8.S0ой .Tсектор
директории).

ФОРМАТ КАТАЛОГА ДИСКА

Каталог занимает на диске нулевую дорожку. Сектора с 0 по 7
используются для хранения информации о файле (по 16 байт на
файл):
bytes 0..7 - имя файла в ASCII;
byte 8 - тип файла;
bytes 9,10 - параметр "START";
bytes 11,12 - длина файла;
byte 13 - объем файла в секторах;
byte 14 - номер первого сектора;
byte 15 - номер первого трека.

Если первый байт заголовка содержит значение #01, то файл
считается удаленным. По значению #00 определяется конец
каталога.
Восьмой сектор нулевой дорожки содержит информацию о диске в
целом:


! АДРЕС ОТ ! !
! HАЧАЛА ! КОММЕHТАРИИ !
! СЕКТОРА ! !
!----------+--------------------------------------------------!
! #Е1 ! Первый свободный сектор !
! #Е2 ! Первый свободный трек !
! #Е3 ! Тип диска !
! ! #16 - 80 дорожек, двухсторонний !
! ! #17 - 40 дорожек, двухсторонний !
! ! #18 - 80 дорожек, односторонний !
! ! #19 - 40 дорожек, односторонний !
! #Е4 ! Общее количество файлов !
! #Е5,#Е6 ! Количество свободных секторов на диске !
! #Е7 ! Код #10, определяющий принадлежность диска к !
! ! системе TR DOS !
! #F4 ! Количество удаленных файлов !
! #F5-#FC ! Имя диска в ASCII !


  Коды ошибок.
Все сообщения об ошибках появляются только из TRDOS. Если
команда поступила из SOS или из программы в машинных кодах, то
сообщение не появится на экране. Однако они хранятся как код в
регистровой паре "BC":

0 - ошибок нет
1 - нет файлов
2 - файл существует
3 - нет пространства памяти
4 - сбой в каталоге
5 - номер записи переполнен
6 - нет диска
7 - дисковые ошибки
8 - синтаксические ошибки
10 - канал уже открыт
11 - нет файла на диске
12 - канал не открыт

Hу вот и все
*MAS* с кувалдой




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

Похожие статьи:
Report - отчет Alone Coder'a о поездке на ParaDigMus'2003.
Последнее слово в номер - главная идея этого номера генза - убедить вас поддержать перепись.
Вступление - Начинаем нашу тусовку по вопросам создания газеты.

В этот день...   7 декабря