Доступ к портам ввода-вывода 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 затирается, кажется, что код был создан на демонстрационной вечеринке в условиях нехватки времени, и в него было вложено не так много "дизайна". Это больше похоже на «достаточно хорошо работает».