1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Зачем на PC AT использовались порты дисков XT?

Тема в разделе "WASM.DOS", создана пользователем tkzv, 28 мар 2019.

Метки:
  1. tkzv

    tkzv Member

    Публикаций:
    0
    Регистрация:
    20 апр 2018
    Сообщения:
    31
    Изучаю игру начала 1990х Reunion (ещё реальный режим, но уже VGA и EMS). Написана на Турбо Паскале, поэтому вcя работа с диском идёт через функции MS-DOS. Но время от времени встречаются обращения к портам, которые IDA опознаёт как порты жёсткого диска PC XT. Пример:
    Код (Text):
    1.  
    2. proc far
    3. pusha
    4. push    ds
    5. push    es
    6. cli
    7. mov     cx, 1
    8. mov     dx, 322h
    9. mov     al, 3
    10. out      dx, al          ; XT Hard Disk: generate controller select pulse
    11. mov     dx, 323h
    12. mov     al, 0Dh
    13. out     dx, al          ; XT Hard Disk: DMA and interrupt mask register bits:
    14. mov     dx, 325h
    15. mov     al, 3
    16. out     dx, al
    17. mov     dx, 323h
    18. mov     al, 9
    19. out     dx, al          ; XT Hard Disk: DMA and interrupt mask register bits:
    20. ...
    21.  
    Поиск в Гугле даёт, в основном, руководства по TCP/UDP. И TechHelp, который подтверждает, что да, это порты жёстких дисков XT, но настоятельно рекомендует не выпендриваться, и пользоваться функциями ДОСа.

    Что на самом деле делают эти порты? Ссылки на справочники помимо Ralph Brown's Interrupt List и TechHelp (оба уже есть) приветствуются.
     
    Последнее редактирование: 29 мар 2019
  2. Indy_

    Indy_ Забанен

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.518
    tkzv,

    Адреса портов были стандартизированы, для базовых портов, всякие интервальные таймеры и клавиатуры. Но для расширений адреса совершенно произвольны у каждого вендора. А есчо в те древние времена когда зарождались сложные шинные контроллеры прерывания стало можно переназначать и железо перестало быть к ним привязанным. Но столь древняя тема, что даже гугл этого не помнит. Зачем вам это.
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    616
  4. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    Помимо "Tech-Help", есть ещё "RBIL" - справочник Ральфа Брауна.
    вот как он описывает эти порты:

    Код (Text):
    1. ----------P0320/0323--------------------------
    2. PORT 0320-0323 - XT HDC 1   (Hard Disk Controller)
    3. SeeAlso: PORT 01F0h-01F7h
    4.  
    5. 0320  RW  data register
    6. 0321  -W  reset controller
    7. 0321  -R  read controller hardware status (see #P0574)
    8. 0322  -R  read DIP switch setting on XT controller card
    9. 0322  -W  generate controller-select pulse
    10. 0323  -W  write pattern to DMA and INT mask register
    11.  
    12. Bitfields for XT hard disk controller hardware status:
    13. Bit(s)    Description    (Table P0574)
    14. 7-6      always 0
    15. 5        logical unit number
    16. 4-2      always 0
    17. 1        error occurred
    18. 0        always 0
    19.  
    20. ----------P03240327--------------------------
    21. PORT 0324-0327 - XT HDC 2   (Hard Disk Controller)
    22. ----------P0328032B--------------------------
    23. PORT 0328-032B - XT HDC 3   (Hard Disk Controller)
    24.  
    На этапе процедуры POST, биос опрашивает все порты и проверяет статус (в данном случае флаг из порта 0321). От этого выхлопа выставляется дефолтный порт диска, который отправляется функции int-13h. Имеются-же исходники старых биосов, где можно посмотреть алгоритм - в частности эту процедуру из скрепки:

    Код (ASM):
    1. HD_RESET_1    PROC    NEAR
    2.          PUSH     CX                      ; SAVE REGISTER
    3.          PUSH  DX
    4.          CLC                              ; CLEAR CARRY
    5.          MOV      CX,0100H             ; RETRY COUNT
    6. L6:   CALL     PORT_1
    7.          OUT      DX,AL                   ; RESET CARD
    8.          CALL     PORT_1
    9.          IN       AL,DX                   ; CHECK STATUS
    10.          AND      AL,2                    ; ERROR BIT
    11.          JZ       R3
    12.          LOOP     L6
    13.          STC
    14. R3:   POP      DX                      ; RESTORE REGISTER
    15.          POP      CX
    16.          RET
    17. HD_RESET_1     ENDP
    18.  
     

    Вложения:

    • BIOSXT.ZIP
      Размер файла:
      10 КБ
      Просмотров:
      18
  5. tkzv

    tkzv Member

    Публикаций:
    0
    Регистрация:
    20 апр 2018
    Сообщения:
    31
    Скорее всего, это звуковая карта, отличная от Adlib, Sound Blaster и Gravis Ultrasound.

    Я же написал, смотрю, как устроена старая игра. Если там есть музыка, специфичная для экзотической звуковой карты, это будет интересно. Хотя это вряд ли.

    Зачем я глубоко полез — простой распаковщик картинок не всегда верно декодирует анимацию. Большинство кадров — дельты относительно предыдущих, но есть исключения. При декодировании покадрово между кадрами может идти вывод в порты, ответственные за настройку палитры VGA, за таймеры, и вот эти диски XT, которые к моменту выхода игры вряд ли уже выпускали.

    Спасибо, но там те же диски XT.


    Спасибо, но это всё то же. Не думаю, чтобы авторы этой игры или стандартных паскалевских библиотек залезали столь глубоко.

    У Брауна рядом упоминается MPU-401, что было бы саым логичным, но там 330-331.
     
  6. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    Под АТ-машиной эта гейма запускается?
    Если да, то порт 322h явно не принадлежит диску. Ещё можно в дизассемблере контекстным поиском попытаться найти [mov dx,01F0] (с последующим in/out) - если найдёшь, то 322h так-же не имеет отношения к диску.
     
  7. tkzv

    tkzv Member

    Публикаций:
    0
    Регистрация:
    20 апр 2018
    Сообщения:
    31
    Да, нормально работала на 386-м.
    "01f0" не нашёл. И вообще никаких 01f.h. Это прямая работа с диском AT? Как я понимаю, вся работа с диском идёт через int 21h, поэтому этих портов там тоже быть не должно. Поэтому порты XT меня и удивили.
     
  8. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    что там должно быть, знает только разработчик..
    int-21h для дисков - это конкретный тормоз, т.к. всё-равно зовёт int-13h, а тот порты. Поэтому в играх и обращались сразу к портам - от них профита больше.
     
  9. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    616
  10. Indy_

    Indy_ Забанен

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.518
    tkzv,

    > Я же написал, смотрю, как устроена старая игра.

    Я недавно похожей некромантией занялся. Флоппи дисковод разобрал что бы от туда датчики холла выпаять. Кстате интересные смдешки - даёшь питание в несколько раз больше штатного они начинают магнитное поле планеты воспринимать(долго разбирался что за фигня происходит при повороте платы). Так просто между делом решил поискать даташиты на контроллеры - их в сети нет. Сборка в китайском подвале. Вот так и в твоём случае с портами.