С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Возможно так оно и есть, я не претендую на знание английского, что-бы быстро уточнить этот вопрос в дата-шитах, и сложным программированием на Векторе занимался 20лет назад и не помню деталей (подробностей работы с прерываниями).
Но отключение INTE (переход в 0) через 4 такта после прихода фронта INT - проявление аппаратной зависимости этих сигналов, на мой взгляд. Поскольку 4 такта - это одна команда, и она навряд-ли будет DI, с моей точки зрения.
Хотя я могу путать с другими процами, у которых внешнее прерывание формирует аппаратный запрет прерываний, и по окончании обработки прерывания его приходится всегда разрешать, иначе следующего не наступит.
ага.. значит хоть в этом у меня нет расхождения.
А почему так? Тесты вроде ваши. Вы полностью прописываете все регистры или что-то забываете?
А на реальном Векторе есть возможность так же запустить tst8253 после других тестов?
- - - Добавлено - - -
KTSerg,
ну тогда значит сам процессор принудительно выдает DI при наступлении прерываний, а обработчик прерываний значит обязан выполнить EI перед выходом, чтобы вновь разрешить прерывание.
Получается, что модель ВИ53 где-то глючит.
- - - Добавлено - - -
Однако, это не отвечает на вопрос почему Exolon так глючит у меня.
- - - Добавлено - - -
ivagor,
а дайте ссылки на ваши тесты. Или лучше сюда залейте чтобы все в одно место.
Я протестирую их у себя и может тогда будет ясно (с вашей помощью) где у меня проблемы.
Провёл эксперимент на реал Векторе (02).
Написал программку:
.org 0
EI
HLT
JMP 0
.org 38h
RET
.
Это просто цикл прерываний.
Результат такой:
Через 4 такта после фронта "F50Гц", "INTE" падает в "0" и отключает "INT".
INTE восстанавливается в "1" через 44 такта.
Если убрать EI (заменить NOPом, или вроде пробовал JMP 0001) - прерывания никогда не наступают.
Если вставлять "NOP" между HLT и JMP 0 - это приводит к тому, что каждый NOP задерживает восстановление INTE на 4 такта.
Если заменить
RET
на
EI
RET
т.е. разрешить прерывания сразу после перехода к ним, то INTE восстанавливается через 20 тактов.
Т.е. INTE - падает в 0 (запрет прерываний) как программный, так и аппаратный выходной сигнал процессора, поскольку я не использовал DI, а он сам срабатывал.
И разрешать прерывания на Векторе нужно программно - обязательно (если они нужны).
Вроде на процах Мега есть специальная команда выхода из прерывания, которая кроме обычного RETURN сама выполняет ещё и EI, но я опять-же могу путать... склероз аднака...![]()
Последний раз редактировалось KTSerg; 23.02.2016 в 10:34.
chkvi53_2, chkvi53_weirdbinbcd. Но эти тесты не сильно важны для нормальной работы классических программ, в основном пробовал детектить эмулятор. Для второго теста нет результата реального вектора.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)