Цитата Сообщение от nzeemin Посмотреть сообщение
У меня есть код процессора, который проходит тест 791401, но пока не проходит 791404
Если не ошибаюсь - тест 791404 проверяет (в том числе и) соблюдение строгой последовательности обработки прерываний от последовательных портов при их одновременном приходе. Т.е. тест делает MTPS 0340, затем вызывает установку IRQ от портов передачи и приёма терминала не в том порядке, в каком эти прерывания должны обрабатываться, потом делает MTPS 0 и смотрит, прерывание от какого порта будет обработано первым. Если первым будет обработано прерывание от того порта, который первым выставил запрос IRQ, но по строгому порядку должен быть обслужен вторым - эмуляция не засчитывается :)

---------- Post added at 12:57 ---------- Previous post was at 12:36 ----------

Еще одна тонкость, необходимая для успешного прохождения эмулятором теста 791404 (если не ошибаюсь) в том, что прерывания по готовности выходного порта терминала должны отставать от команды записи в его регистр данных не менее чем на 4 команды процессора.

---------- Post added at 13:06 ---------- Previous post was at 12:57 ----------

Ну и, конечно - прерывание при установке бита 6 (бит разрешения прерываний) в регистре готового устройства (установлен бит 7) должно происходить строго через одну команду процессора после команды установки бита 6.

Если следующая команда сбросит бит 6 ( а значит - отменит IRQ ) - эмулятор должен выполнять HALT_Trap_To_SEL1+012, но если следующая команда не только сбросит бит 6, но и вызовет сброс шины - отмена IRQ должна проходить без проблем.