В свете последних событий, связанных с интересом к ошибке приема адреса вектора прерывания, реализованной в процессорах семейства 1801ВМх, решил потестировать в УКНЦ такое устройство, как ловушка адреса, и попытаться с помощью него получить ошибку приема АВП. Сразу скажу заранее, что ошибку приема АВП мне получить не удалось, но интересные результаты, связанные с предвыборкой команд в микропроцессоре 1801ВМ2 получил. На ваш суд будут представлены четыре программы, различающиеся только командами установки и сброса разрешения прерывания для регистра ловушки. Отличаться эти команды будут тем, что будут состоять из одного или нескольких слов. Если команда состоит из нескольких слов, то нарушается работа предвыборки, если команда состоит из одного слова, то предвыборка будет работать на следующую команду при исполнении текущей.
Итак, сначала познакомимся с ловушкой адреса в УКНЦ. Ловушка адреса состоит из двух регистров: регистра управления (176644) и регистра адреса для ловушки (176646).
Формат регистра управления:
бит 0 - режим работы, если установлен бит 8, то при установленном разряде 0 вырабатывается прерывание, при сброшенном разряде вырабатывается лог.0 на линии "ПОРТ" и сигнал RPLY.
бит 1 - указатель области памяти, которой принадлежит искомый адрес: 1 - область HALT, 0 - область USER.
биты с 2 по 7 - старшая часть адреса вектора прерывания, младшие два разряда считаются нулем.
бит 8 - разрешение прерывания. При установленном разряде разрешено прерывание или выработка сигнала "ПОРТ".
бит 9 - режим 1. Обеспечивает чтение/запись линии РЕЖ.1, лог.1. - низкий уровень на РЕЖ.1, лог.0 - высокий уровень на РЕЖ.1. Считываемое значение складывается по ИЛИ из значения записанного сигнала и значения приложенного извне к линии РЕЖ.1.
В регистр адреса (176646) записывается искомый адрес, который мы ловим.
Сами регистры ловушки входят в состав БМК 1515ХМ1-039, которая является контроллером адресного пространства ЦП и ОЗУ ЦП. Смысл ловушки состоит в том, что когда на линии адреса/данных по сигналу SYNC защелкивается адрес, который прописан в регистре 176646, то ловушка подает запрос на прерывание при установленных битах 0 и 8 в регистре 176644.
Т.к. чтение команд в микропроцессоре 1801ВМ2 может осуществляться с предвыборкой, то можно получить интересные результаты. Итак, программа работает с разрешенными прерываниями (а иначе не было бы смысла), таймер выключен. В качестве вектора программируем вектор 200, при этом он указывает на ячейку 0, а в ячейке 0 - значение 0 (команда HALT). Таким образом программа может завершиться нормально или остановится с адресом 2 (следующий за командой HALT). Соответственно для разрешения прерывания ловушки надо в регистр управления записать 0601, а для запрещения прерываний записать 0200. Сами программы набивались в пультовом мониторе, мне это удобно, программы небольшие, можно сразу увидеть результат, глянуть регистры, ячейки памяти, что творится в стеке. После прерывания адрес прерванной команды находится в стеке в ячейке с адресом 774.
Программа 1. Используются команды установки и запрещения прерываний ловушки, состоящие из нескольких слов, в результате чего работа предвыборки нарушена.
Код:
1000:106427 000000 MTPS #0
1004:012706 001000 MOV #1000,SP
1010:012737 ...... 176646 MOV #......,@#176646
1016:012737 000601 176644 MOV #601,@#176644
1024:012737 000200 176644 MOV #200,@#176644
1032:000240 NOP
1034:000240 NOP
1036:000000 HALT
Вместо "......" последовательно используются значения 1022, 1024, 1026, 1030 и 1032, т.е. используются адреса команды сброса прерывания в регистре ловушки, а также по одному адресу до и после этой команды.
Получившиеся результаты:
1022 - нет прерывания
1024 - прерывание по адресу 1032
1026 - прерывание по адресу 1032
1030 - прерывание по адресу 1032
1032 - нет прерывания
Сразу по результатам. Естественно прерывания по адресу 1022 и быть не может, т.к. после установки разрешения прерывания этот адрес уже был прочитан, работа предвыборки нарушена и следующим будет читаться адрес 1024. По адресам 1024,1026 и 1030 расположена команда MOV #200,@#176644, которая запрещает прерывание от ловушки. Команда состоит из нескольких слов, из-за чего нарушается предвыборка, но при ее исполнении активизируется прерывание и исполняется после исполнения команды, несмотря на то, что команда запрещает прерывание. По адресу 1032 естественно прерывания уже нет, т.к. работа предвыборки нарушена, команда NOP по адресу 1032 будет уже читаться не во время, а после исполнения предыдущей команды, а прерывания от ловушки уже запрещены.
---------- Post added at 21:05 ---------- Previous post was at 20:37 ----------
Программа 2. Используется команды установки прерывания ловушки из нескольких слов, а запрещения прерываний ловушки из одного слова, в результате чего работа предвыборка работает на команду NOP, расположенной после команды запрещения прерываний ловушки.
Код:
1000:106427 000000 MTPS #0
1004:012706 001000 MOV #1000,SP
1010:012700 176644 MOV #176644,R0
1014:012702 000601 MOV #601,R2
1020:012703 000200 MOV #200,R3
1024:012737 ...... 176646 MOV #......,@#176646
1032:012737 000601 176644 MOV #601,@#176644
1040:010310 MOV R3,@R0
1042:000240 NOP
1044:000240 NOP
1046:000000 HALT
Вместо "......" последовательно используются значения 1036, 1040, 1042 и 1044, т.е. используются адреса команды сброса прерывания в регистре ловушки, а также по одному адресу до и после этой команды.
Получившиеся результаты:
1036 - нет прерывания
1040 - прерывание по адресу 1042
1042 - прерывание по адресу 1042
1044 - нет прерывания
Рассмотрим результаты. По адресу 1036 прерывания и быть не может, т.к. после установки разрешения прерывания этот адрес уже прочитан. После установки разрешения прерывания командой MOV #601,@#176644 работа предвыборки нарушена и следующая команда будет считываться уже после исполнения предыдущей. Так команды запрета прерываний MOV R3,@R0 считывается при установленном разрешении прерываний, то и прерывание по адресу 1040 будет (хотя она и запрещает прерывания). А далее более интересный случай - команда запрещения прерывания MOV R3,@R0 состоит из одного слова, соответственно работа предвыборки не нарушена, и следующая команда NOP читается во время ее исполнения (т.е. когда фактически прерывания разрешены), поэтому прерывание произойдет. По адресу 1044 уже не будет прерывания, т.к. команда читается во время исполнения предыдущей команды NOP, а прерывания уже запрещены.
---------- Post added at 21:20 ---------- Previous post was at 21:05 ----------
Программа 3. Используется команды установки прерывания ловушки из одного слова, а запрещения прерываний ловушки из нескольких слов, в результате чего предвыборка работает на команду запрещения прерываний ловушки, и не работает на первую команду NOP.
Код:
1000:106427 000000 MTPS #0
1004:012706 001000 MOV #1000,SP
1010:012700 176644 MOV #176644,R0
1014:012702 000601 MOV #601,R2
1020:012703 000200 MOV #200,R3
1024:012737 ...... 176646 MOV #......,@#176646
1032:010210 MOV R2,@R0
1034:012737 000200 176644 MOV #200,@#176644
1042:000240 NOP
1044:000240 NOP
1046:000000 HALT
Вместо "......" последовательно используются значения 1032, 1034, 1036, 1040, 1042 и 1044 т.е. используются адреса команды сброса прерывания в регистре ловушки, а также по одному адресу до и после этой команды.
Получившиеся результаты:
1032 - нет прерывания
1034 - нет прерывания
1036 - прерывание по адресу 1042
1040 - прерывание по адресу 1042
1042 - нет прерывания
1044 - нет прерывания
Рассмотрим результаты. Соответственно по адресу 1032 не может быть прерывания, т.к. команда установки уже прочитана из памяти до установки разрешения прерывания. А вот далее работает предвыборка. Т.к. команда установки разрешения прерывания MOV R2,@R0 состоит из одного слова и не нарушает работу предвыборки, первое слово команды запрещения прерывания от ловушки MOV #200,@#176644 будет прочитано еще до установки разрешения прерывания, потому по адресу 1034 прерывания и не произойдет. По адресам 1036 и 1040 прерывание будет, т.к. они читаются при установленном разрешении прерывания от ловушки. Команда NOP по адресу 1042 читается при запрещенном прерывании то ловушки, к тому же предвыборка нарушена, соответственно код команды будет читаться из памяти при запрещенном прерывании от ловушки и прерывания не будет. Также не будет прерывания и по адресу 1044.