Важная информация

User Tag List

Показано с 1 по 5 из 5

Тема: Поиск файла и обработка ошибок в TR-DOS

  1. #1
    Activist Аватар для AndTorp
    Регистрация
    03.03.2008
    Адрес
    Петербург
    Сообщений
    271
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Поиск файла и обработка ошибок в TR-DOS

    Столкнулся с такой проблемкой:

    Код:
            ;<...>
             LD   A,9
             LD   (#5D06),A
             LD   C,#0A
             CALL DOS
            ;<...>
             RET
    
    DOS     ;<...>
             LD    HL,0
             LD    (#5D0F),HL
            ;<...>
             CALL #3D13
            ;<...>
             LD    A,(#5D0F)
             OR    A
             RET   Z
            ;Далее обработка ошибки
    Так вот, ошибка выскакивает всегда - есть/нет файл, есть/нет диск.
    Просмотр значения переменной #5D0F показал, что после выполнения функции "Поиска элемента каталога #0A" в эту переменную копируется значение регистра С (а там или номер первого совпадающего элемента каталога или #FF).
    Это как-то можно обойти?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    15.01.2005
    Адрес
    USSR
    Сообщений
    2,038
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Лучше всего перед _каждым_ вызовом TR DOS обнулять системные переменные ошибок как в TR DOS, так и в основной системе. Я традиционно использую такую конструкцию (она входит во все мои программы, работающие с TR DOS):

    TRDOS DI
    LD (IY+0),#FF
    PUSH HL
    LD HL,0
    LD (23823),HL
    POP HL
    CALL #3D13
    [ DI,EI ]
    RET

    Как обычно, на входе в C код операции, в парах, если надо, параметры.
    Просто вместо вызова сразу CALL #3D13 вызываете CALL TRDOS.

  4. #3
    Activist Аватар для AndTorp
    Регистрация
    03.03.2008
    Адрес
    Петербург
    Сообщений
    271
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Wlodek, ну я, примерно, это и делаю. Кроме (LD (IY+0),#FF).
    Проблема в том, что функция "Поиск элемента каталога #0A" не только возвращает значение (номер первого совпавшего файла или при отсутствии #FF) в регистре C, но и дублирует это значение в переменной #5D0F (код ошибки TR-DOS). Зачем такой дубляж непонятно, может глюк TR-DOS.

  5. #4
    Guru
    Регистрация
    15.01.2005
    Адрес
    USSR
    Сообщений
    2,038
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, я под TR DOS пишу с 1993 года (как появился Pentagon 128), и всё, абсолютно всё работает . Так что я типо знаю, чтО советую .

  6. #5
    Activist Аватар для AndTorp
    Регистрация
    03.03.2008
    Адрес
    Петербург
    Сообщений
    271
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Wlodek Посмотреть сообщение
    Ну, я под TR DOS пишу с 1993 года (как появился Pentagon 128), и всё, абсолютно всё работает . Так что я типо знаю, чтО советую .
    Wlodek, я совершенно не собирался (и не собираюсь) преуменьшать Ваши знания и навыки работы с TR-DOS. Просто столкнулся с проблемой, что функция #0A возвращает значение не только в регистре C, но и, почему-то, в переменной #5D0F.

    Вот, если потрассировать данную программку в отладчике, то перед RET будет C=A=(#5D0F).
    Код:
    	ORG  	25000
    	
    	LD	HL,FILE
    	LD	C,#13
    	CALL	#3D13
    
    	LD	A,9
    	LD	(#5D06),A
    	LD	HL,0
    	LD	(#5D0F),HL
    	LD	C,#0A
    	CALL	#3D13
    	
    	LD	A,(#5D0F)
    	RET
    
    FILE	DB	"FILENAMET"
    Из-за этого получается непонятная ситуация. Например, при значении C=(#5D0F)=6 непонятно - или на дискете присутствует файл (имя.тип которого заданы в дескрипторе) и его номер 6, или в дисководе нет дискеты. Вопрос - как это можно обойти? Пока придумал только считывать всю область каталога в память и уже там искать нужный файл своей процедурой.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. TR-Dos #3D13 с отключенной обработкой ошибок
    от Sinus в разделе Программирование
    Ответов: 1
    Последнее: 17.08.2011, 09:51
  2. Обработка звука на iBook
    от megabyte в разделе Apple
    Ответов: 3
    Последнее: 01.01.2011, 22:39
  3. Ответов: 8
    Последнее: 04.06.2010, 21:19
  4. Ответов: 30
    Последнее: 21.03.2005, 13:43

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •