Energy #05
29 мая 1997
  TR-DOS  

TR-DOS - О работе с портами TR-DOS'а.

╔════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ TR-DOS ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════╝

                  Docent/LGN '& Spectre/LGN

    В  этом  номере  ENERGY  мы  открываем
новую    рубрику,    посвященную    мелким
хитростям,  позволяющим облегчить нелегкую
жизнь   кодера.   Первая  из  этих  статей
немного    развернет    тему   начатую   в
ZX-FORMAT'е #5 "TR-DOS для программистов".
ZX-FORMAT  в  лице Макса Петрова нам очень
подробно описал как написать turbo-loader;
Echo  поведало, как избежать неприятностей
при  работе с ВГ'шкой; ну а мы расскажем о
работе   с  портами  TR-DOS'а.  Существует
несколько   способов   работы   с  портами
TR-DOS'а:

    -  на  некоторых компьютерах (например
    PROFI)   можно   поставить  ВГ'шку  на
    прямой доступ

    -  в  некоторых ПЗУ (TR-DOS) по адресу
    #3C30 прошиты коды команд

             IN A,(#1F)
             RET

    - в TR-DOS v5.03 по адресу #09E7 есть
    аналогичное сочетание

    Тяга всех к порту #1F объясняется тем,
что  остальные порты читать не столь важно
(кроме  порта #7F конечно). А из порта #1F
считывается  байт  ошибок произошедших при
работе  с диском. Небольшое отступление: с
записью  в  порты никаких проблем нет, так
как по адресу #2A53 прошито:

             OUT (C),A
             RET

    Теперь  про  чтение,  самый  первый  и
самый известный способ чтения из порта #1F
упомянут  Родионовым  в  его книге "TR-DOS
для  пользователей  и  программистов",  он
несмотря на недостатки (портятся некоторые
регистры,    портится   содержимое   порта
секторов,  и  т.д.)  до  сих  пор  активно
применяется.   Более   подробное  описание
этого  способа  смотрите  в вышеупомянутой
книге. Мы расскажем еще два:

      #3EF3  IN H,(C)
      #3EF5  IN A,(#FF)
             AND #C0
             JR Z,#3EF5
             EI
             RET M
             DI
             IN A,(#7F)
             JR #3EF5

    Этот    способ    работает   на   всех
компьютерах,  с  помощью него можно читать
содержимое  любого  регистра  ВГ'шки.  Для
этого  в  BC  задаете  номер  порта  и в H
получаете   считанное   значение,  главное
чтобы в процессе выполнения этой процедуры
пришел   сигнал  об  окончании  выполнения
команды.
    И второй:

      #3FE5  IN A,(#FF)
             AND #C0
             JR Z,#3FE5
             RET M
      #3FEC  INI
             JR #3FE5

    Эта  процедура  используется TR-DOS'ом
для    чтения    данных,   но   мы   можем
использовать  ее  для чтения информации из
любого  порта.  Применение:  в  HL задаете
адрес  куда поместится результат операции,
а  в  BC номер порта. Запускать ее нужно с
адреса     #3FEC.    Условия    выполнения
аналогичны  предыдущей. Соответствие битов
в прочитанной информации вы можете найти в
все  той  же  книге  Родионова о TR-DOS'е.
Если вас заинтересовало то можно упомянуть
об адресе #2099, результатом использования
данной  процедуры  будет  состояние  флага
ZERO: если не произошло ни одной ошибки то
будет  Z, ну а при NZ - DISK ERROR !!! При
этом ошибкой считается любая ситуация (нет
диска,   ошибка   чтения/записи,  и  т.д.)
Теперь о вызове данной процедуры:

        PUSH BC       ; сохраним BC и HL
        PUSH HL       ;     IN
        LD HL,CONTIN  ;   A,(#1F)
        PUSH HL       ;
        LD HL,METKA   ;   AND #7F
        PUSH HL       ;
        LD B,1        ;    OR A
        PUSH BC       ;
        LD HL,#2099   ;    RET Z
        PUSH HL
        JP #3D2F
METKA   DB #01
CONTIN  DI
        POP HL        ;  продолжение
        POP BC

 Примечание: после выполнения делается EI.

    В  завершении  статьи  можем добавить,
что  во  избежание  проблем  с компьютером
"Байт-01"   и  с  целью  работоспособности
наших   turbo-loader'ов   на   винчестерах
авторы  этой статьи пользуются стандартной
точкой  входа  в  TR-DOS - #3D13, а ошибки
отлавливают   через  #5CC2.  Как  отловить
ошибки через #5CC2 можете посмотреть в ART
STUDIO.  А  может  быть мы напишем об этом
статью.





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

Похожие статьи:
История - Kлоны Спeктрyма: Львовский вариант и Ленинград.
Разное - о кошках, спасающих жизни.
Реклама - Реклама и объявления ...

В этот день...   20 сентября