Изучаю игру начала 1990х Reunion (ещё реальный режим, но уже VGA и EMS). Написана на Турбо Паскале, поэтому вcя работа с диском идёт через функции MS-DOS. Но время от времени встречаются обращения к портам, которые IDA опознаёт как порты жёсткого диска PC XT. Пример: Код (Text): proc far pusha push ds push es cli mov cx, 1 mov dx, 322h mov al, 3 out dx, al ; XT Hard Disk: generate controller select pulse mov dx, 323h mov al, 0Dh out dx, al ; XT Hard Disk: DMA and interrupt mask register bits: mov dx, 325h mov al, 3 out dx, al mov dx, 323h mov al, 9 out dx, al ; XT Hard Disk: DMA and interrupt mask register bits: ... Поиск в Гугле даёт, в основном, руководства по TCP/UDP. И TechHelp, который подтверждает, что да, это порты жёстких дисков XT, но настоятельно рекомендует не выпендриваться, и пользоваться функциями ДОСа. Что на самом деле делают эти порты? Ссылки на справочники помимо Ralph Brown's Interrupt List и TechHelp (оба уже есть) приветствуются.
tkzv, Адреса портов были стандартизированы, для базовых портов, всякие интервальные таймеры и клавиатуры. Но для расширений адреса совершенно произвольны у каждого вендора. А есчо в те древние времена когда зарождались сложные шинные контроллеры прерывания стало можно переназначать и железо перестало быть к ним привязанным. Но столь древняя тема, что даже гугл этого не помнит. Зачем вам это.
https://www.booksite.ru/fulltext/1/001/005/001/037.txt --- Сообщение объединено, 28 мар 2019 --- искать по ключевому слову "322"
Помимо "Tech-Help", есть ещё "RBIL" - справочник Ральфа Брауна. вот как он описывает эти порты: Код (Text): ----------P0320/0323-------------------------- PORT 0320-0323 - XT HDC 1 (Hard Disk Controller) SeeAlso: PORT 01F0h-01F7h 0320 RW data register 0321 -W reset controller 0321 -R read controller hardware status (see #P0574) 0322 -R read DIP switch setting on XT controller card 0322 -W generate controller-select pulse 0323 -W write pattern to DMA and INT mask register Bitfields for XT hard disk controller hardware status: Bit(s) Description (Table P0574) 7-6 always 0 5 logical unit number 4-2 always 0 1 error occurred 0 always 0 ----------P03240327-------------------------- PORT 0324-0327 - XT HDC 2 (Hard Disk Controller) ----------P0328032B-------------------------- PORT 0328-032B - XT HDC 3 (Hard Disk Controller) На этапе процедуры POST, биос опрашивает все порты и проверяет статус (в данном случае флаг из порта 0321). От этого выхлопа выставляется дефолтный порт диска, который отправляется функции int-13h. Имеются-же исходники старых биосов, где можно посмотреть алгоритм - в частности эту процедуру из скрепки: Код (ASM): HD_RESET_1 PROC NEAR PUSH CX ; SAVE REGISTER PUSH DX CLC ; CLEAR CARRY MOV CX,0100H ; RETRY COUNT L6: CALL PORT_1 OUT DX,AL ; RESET CARD CALL PORT_1 IN AL,DX ; CHECK STATUS AND AL,2 ; ERROR BIT JZ R3 LOOP L6 STC R3: POP DX ; RESTORE REGISTER POP CX RET HD_RESET_1 ENDP
Скорее всего, это звуковая карта, отличная от Adlib, Sound Blaster и Gravis Ultrasound. Я же написал, смотрю, как устроена старая игра. Если там есть музыка, специфичная для экзотической звуковой карты, это будет интересно. Хотя это вряд ли. Зачем я глубоко полез — простой распаковщик картинок не всегда верно декодирует анимацию. Большинство кадров — дельты относительно предыдущих, но есть исключения. При декодировании покадрово между кадрами может идти вывод в порты, ответственные за настройку палитры VGA, за таймеры, и вот эти диски XT, которые к моменту выхода игры вряд ли уже выпускали. Спасибо, но там те же диски XT. Спасибо, но это всё то же. Не думаю, чтобы авторы этой игры или стандартных паскалевских библиотек залезали столь глубоко. У Брауна рядом упоминается MPU-401, что было бы саым логичным, но там 330-331.
Под АТ-машиной эта гейма запускается? Если да, то порт 322h явно не принадлежит диску. Ещё можно в дизассемблере контекстным поиском попытаться найти [mov dx,01F0] (с последующим in/out) - если найдёшь, то 322h так-же не имеет отношения к диску.
Да, нормально работала на 386-м. "01f0" не нашёл. И вообще никаких 01f.h. Это прямая работа с диском AT? Как я понимаю, вся работа с диском идёт через int 21h, поэтому этих портов там тоже быть не должно. Поэтому порты XT меня и удивили.
что там должно быть, знает только разработчик.. int-21h для дисков - это конкретный тормоз, т.к. всё-равно зовёт int-13h, а тот порты. Поэтому в играх и обращались сразу к портам - от них профита больше.
Забавно - гугление "mov dx, 322h" приводит на пост Mikl___ - http://www.programmersforum.ru/showthread.php?t=121424&page=7.
tkzv, > Я же написал, смотрю, как устроена старая игра. Я недавно похожей некромантией занялся. Флоппи дисковод разобрал что бы от туда датчики холла выпаять. Кстате интересные смдешки - даёшь питание в несколько раз больше штатного они начинают магнитное поле планеты воспринимать(долго разбирался что за фигня происходит при повороте платы). Так просто между делом решил поискать даташиты на контроллеры - их в сети нет. Сборка в китайском подвале. Вот так и в твоём случае с портами.