Доступ к портам ввода-вывода PIT(?) 44h и 46h - что эти порты делают?

Я дизассемблировал приложение MS-DOS .com и наткнулся на доступ к портам, которого я не понимаю. Точнее, через IN инструкция, значения считываются из следующих портов.

      40h
44h
46h

В документации, найденной здесь, упоминаются порты 40h-47hпринадлежат к "Программируемому интервальному таймеру", но подробно деталиописываются только на портах. 40h-43h.

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

Я также нашел эту ссылку (на немецком языке), в которой не упоминаются 4 других порта. Кто-нибудь знает точную функцию этих портов, в идеале со ссылкой?

1 ответ

Решение

Ваше предположение кажется верным. Код пытается установить случайные цвета. Поскольку это часть 256-байтового вступления, основное внимание уделяется размеру кода, а не переносимости или качеству случайных чисел. Возможно, этот исполняемый файл изначально предназначался для системы PS/2 или EISA, и таймеры 0, 3 и 5 (канал 0 и 2 второй микросхемы) работали автономно. Если у вас нет системы EISA, часто псевдонимы будут обращаться к таймерам 0, снова 0 и 2. Эта программа не включает звук, поэтому таймер 2 зависнет. Кроме того, код сбивает AH, сгенерированный инструкцией DIV в 1BE, путем выполнения инструкции MUL в 1CA, поэтому значение, считанное из порта 40h, не используется.

Чтобы понять нечто большее, чем это обоснованное предположение, вам нужно будет связаться с автором этого кода. Учитывая ошибку, заключающуюся в том, что AH затирается, кажется, что код был создан на демонстрационной вечеринке в условиях нехватки времени, и в него было вложено не так много "дизайна". Это больше похоже на «достаточно хорошо работает».

Другие вопросы по тегам